有没有办法用X个相同的对象快速初始化一个新的ArrayList对象?
这是一个示例代码:
private List<String> initStringArrayList(int size, String s) {
List<String> list = new ArrayList<>(size);
while (size-- > 0) {
list.add(s);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
我想要得到相同的结果,但对于大的“大小”值来说要快得多。
当然,我可以使用这段代码:
private List<String> initStringArrayList(int size, String s) {
String[] array = new String[size];
Arrays.fill(array, s);
return new ArrayList<>(Arrays.asList(array));
}
Run Code Online (Sandbox Code Playgroud)
但是 ArrayList<>() 的构造函数会复制整个数组,而不是在内部使用它。这是不可接受的。
还有其他方法吗?我需要一个 ArrayList 作为结果,而不仅仅是一个列表。它应该是任何类型,而不仅仅是字符串。
谢谢您的任何答复!
我想显示来自 React 的数组列表,但当我认为我做的一切都正确时它没有显示?请问我哪里错了
下面是代码
import { useState } from 'react';
function App() {
const [items , setItems] = useState([{
id:1,
text:'simple 1'
},
{
id:1,
text:'simple 2'
},
{
id:1,
text:'simple 3'
},
])
return (
<div className="App">
{items.map((item) => (
<h1>{items.text}</h1>
))}
<h1>Hello from React js</h1>
</div>
);
}
export default App;
Run Code Online (Sandbox Code Playgroud) 我有一个返回 ArrayList<byte[]> 的方法,现在我想知道是否有办法可以将其转换为 byte[][]。我见过很多关于 ArrayList<byte> 的问题,但没有看到关于 ArrayList<byte[]> 的问题。我能以某种方式做到这一点吗?
ArrayList<byte[]> list = new ArrayList<>()
Run Code Online (Sandbox Code Playgroud)
到
byte [][] b
Run Code Online (Sandbox Code Playgroud) 在测试中,我向另一个类注入了一个模拟,该类似乎工作正常。但是,当我检查 ArrayList 是否为空时,尽管其长度/大小为 0,结果却为 false。这种情况怎么会发生以及如何解决这个问题?
@Slf4j
@Configuration
@RequiredArgsConstructor
@Setter(onMethod_ = @SuppressFBWarnings({"EI_EXPOSE_REP2", "EI_EXPOSE_REP"}))
@Getter(onMethod_ = @SuppressFBWarnings({"EI_EXPOSE_REP2", "EI_EXPOSE_REP"}))
@EnableConfigurationProperties(MyProperties.class)
public class MyConfig {
private final MyProperties myProperties;
private final GenericApplicationContext applicationContext;
@PostConstruct
void init() {
Objects.requireNonNull(myProperties, "myProperties needs not to be null.");
if (/*myProperties.getApps().size() == 0 || */myProperties.getApps().isEmpty()) {
log.info("bla bla bla");
} else {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试课:
@ExtendWith(MockitoExtension.class)
class MyConfigTest {
@Mock
MyProperties myPropertiesMock;
@InjectMocks
MyConfig myConfig;
ApplicationContextRunner contextRunner;
@Test
void should_check_for_empty_apps() {
contextRunner = new ApplicationContextRunner()
.withPropertyValues("foobar.apps[0].name=", "foobar.apps[0].baseUrl=", …Run Code Online (Sandbox Code Playgroud) 我想从没有 char 'a' 作为最后一个字母的数组列表中返回一个名称列表,我尝试为其创建一个循环并找到每个名称的最后一个字母。
List<String> names = new ArrayList<>();
names.addAll(Arrays.asList("Tomek", "Ania", "Krzys", "Tomek"));
String last = names.get(names.size());
int lastLetter = last.length() - 1;
for (String word : names) {
if (lastLetter != 'a' ) {
System.out.println(names);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出
["Tomek", "Krzys","Tomek"]
Run Code Online (Sandbox Code Playgroud) public static ArrayList<Integer> duplicates(int[] arr) {
ArrayList<Integer> doubles = new ArrayList<Integer>();
boolean isEmpty = true;
for(int i = 0; i<arr.length; i++) {
for (int j = i+1; j< arr.length; j++) {
if( arr[i] == arr[j] && !doubles.contains(arr[i]) ){
doubles.add(arr[i]);
isEmpty = false;
break;
}
}
}
if(isEmpty) doubles.add(-1);
Collections.sort(doubles);
return doubles;
}
public static void main(String[] args) {
System.out.println( ( duplicates( new int[]{1,2,3,4,4,4} ) ) ); // Return: [4]
}
Run Code Online (Sandbox Code Playgroud)
我用 Java 创建了这个函数,它返回输入 int 数组的倍数,如果输入数组为空或没有倍数,则返回 -1。
它有效,但可能有一种方法可以让它更快。是否有任何好的做法可以使函数总体上更高效、更快?
因此,我尝试生成一个充满唯一随机整数的数组,我发现使用数组列表执行此操作将是最有效的方法。
public static int [] randArr(int n, int max){
randArr = new int[n];
Random rn = new Random();
Set<Integer> test = new HashSet<Integer>();
while(test.size() < n){
test.add(rn.nextInt(0, max));
}
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用,randArr = test.toArray()但我不太确定括号里应该放什么,也不确定这是否真的可行。是否还有其他转换方法,因为我也不能简单地通过test.get(i)for 循环将 test 的整数分配给 randArr 。
我需要创建一个简单的购物车,从 url 获取数据并将其存储在列表中,然后存储到会话中。如果商品不在购物车中,则会将其添加到列表中。如果它已经在购物车中,我会将值加一。
到目前为止,这是我的代码,但它没有向购物车添加任何商品。
String pid = request.getParameter("id");
String price = request.getParameter("price");
HttpSession s = request.getSession();
ArrayList<CartItem> cart = (ArrayList<CartItem>) s.getAttribute("cart");
if(cart == null){
cart = new ArrayList<>();
}
for (CartItem item : cart) {
if (item.getId().equals(pid)) {
int count = item.getCount();
item.setCount(count + 1);
} else {
cart.add(new CartItem(pid, 1, price));
}
}
s.setAttribute("cart", cart);
Run Code Online (Sandbox Code Playgroud) 我在leetcode讨论部分看到了这段代码,但我无法理解它。请在这里帮忙。
HashMap<Character,Integer> map = new HashMap<>();
for(char ch: s.toCharArray()){
map.put(ch,map.getOrDefault(ch,0)+1);
}
List<Character> list = new ArrayList<>(map.keySet());//convert hashmap keys into list
list.sort((x,y) -> map.get(y) - map.get(x));
Run Code Online (Sandbox Code Playgroud)
我无法理解下面一行的含义。
list.sort((x,y) -> map.get(y) - map.get(x));
为什么我不能将 ArrayList 大小保存为变量?
public static ArrayList <Integer > merge(ArrayList <Integer > list1,
ArrayList <Integer > list2 ) {
if (list1.size() >= list2.size()) {
int maxSize = list1.size();
} else {
int maxSize = list2.size();
}
for (int i = 0; i < maxSize; i++) {
if (i <= list2.size()) {
int nextInList2 = list2.get(i);
list1.add(i, nextInList2);
}
}
System.out.println(list1);
return (list1);
Run Code Online (Sandbox Code Playgroud)
in: int maxSize = list1.size(); 我认为它没有按照我想要的方式保存变量。
我假设
list1.size()
Run Code Online (Sandbox Code Playgroud)
是一个整数
arraylist ×10
java ×9
arrays ×3
allocation ×1
is-empty ×1
lambda ×1
react-hooks ×1
reactjs ×1
set ×1