要么我做错了,要么我不理解这种方法是如何工作的.
ArrayList<String> a = new ArrayList<String>();
a.ensureCapacity(200);
a.add(190,"test");
System.out.println(a.get(190).toString());
Run Code Online (Sandbox Code Playgroud)
我原本认为ensureCapacity会让我插入一个索引达到该值的记录.有没有不同的方法来做到这一点?
我在第三行得到一个IndexOutOfBounds错误.
我有一个非常简单的问题:
如何在Java上使这段代码更简单:
ArrayList<String> s = new ArrayList<String>();
s.add("str1");
s.add("str hello");
s.add("str bye");
//...
Run Code Online (Sandbox Code Playgroud)
像这样的东西:
ArrayList<String> s = {"a1", "str", "mystr"};
Run Code Online (Sandbox Code Playgroud)
或者那个:
ArrayList<String> s = new ArrayList<String>("a1", "str", "mystr");
Run Code Online (Sandbox Code Playgroud)
或者那个:
ArrayList<String> s = new ArrayList<String>();
s.addAll("a1", "str", "mystr");
Run Code Online (Sandbox Code Playgroud)
或者那个:
ArrayList<String> s = new ArrayList<String>();
s.addAll(new ArrayElements("a1", "str", "mystr"));
Run Code Online (Sandbox Code Playgroud)
我只想要语法提示.谢谢.
我的直觉说阵列比arraylist更快,因为arraylists是使用在填充/丢失元素时调整大小的数组来实现的.
我只是想确认这是否属实,这意味着如果您知道要保留的元素数量,就没有理由使用arraylist.
String[] array = {"a","c","b"};
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(array);
System.out.println(list);
Run Code Online (Sandbox Code Playgroud)
list [a, b, c]输出是为了输出array某些地址.当我们想要输出array值时,我们可以使用Arrays.toString(array);哪个就像list.
我只是想知道为什么我们不能toString()直接调用array来获取值.这样做不是更直观和方便吗?什么导致不同的治疗Array和ArrayList?
我有ArrayList,其中包含足球队(Team Team).团队有积分,我想按点数对它们进行排序.
public class Team {
private int points;
private String name;
public Team(String n)
{
name = n;
}
public int getPoints
{
return points;
}
public void addPoints(boolean win)
{
if (win==true)
{
points = points + 3;
}
else if (win==false)
{
points = points + 1;
}
}
//...
}
Run Code Online (Sandbox Code Playgroud)
主类:
List<Team> lteams = new ArrayList<Team>;
lteams.add(new Team("FC Barcelona"));
lteams.add(new Team("Arsenal FC"));
lteams.add(new Team("Chelsea"));
//then adding 3 points to Chelsea and 1 point to Arsenal
lteams.get(2).addPoints(true); …Run Code Online (Sandbox Code Playgroud) 我有以下HashMap,其中keya是a String,value并由以下内容表示ArrayList:
HashMap<String, ArrayList<String>> productsMap = AsyncUpload.getFoodMap();
Run Code Online (Sandbox Code Playgroud)
我还在ArrayList<String> foods我的应用程序中实现了另一个.
我的问题是,找出我的第二个HashMap包含特定内容的最佳方法是什么?StringArrayList
我试过没有成功:
Iterator<String> keySetIterator = productsMap.keySet().iterator();
Iterator<ArrayList<String>> valueSetIterator = productsMap.values().iterator();
while(keySetIterator.hasNext() && valueSetIterator.hasNext()){
String key = keySetIterator.next();
if(mArrayList.contains(key)){
System.out.println("Yes! its a " + key);
}
}
Run Code Online (Sandbox Code Playgroud) 看看javadoc我看到一个ArrayList有一个重载的add方法:
public boolean add(E e)
将指定的元素追加到此列表的末尾.
和
public void add(int index,E element)
将指定元素插入此列表中的指定位置.将当前位于该位置的元素(如果有)和任何后续元素向右移动(向其索引添加一个元素).
我注意到第一个返回了一段boolean时间,第二个是a void.事实证明,第一个addHAS返回一个boolean因为:
返回:true(由Collection.add(E)指定)
所以我去了Collection.add(E):
布尔加法(E e)
确保此集合包含指定的元素(可选操作).如果此集合因调用而更改,则返回true.(如果此集合不允许重复并且已包含指定的元素,则返回false.)
所以我的问题是,为什么add指定返回boolean而不是void?当我想要的add东西,我希望只做一个操作.
据我所知,还有其他数据结构,与ArrayList相反,不允许重复(例如集合).但即使这样,问题也不可能按照以下方式解决:
public void add(E e){
if(e is not in set){
add e;
}
}
Run Code Online (Sandbox Code Playgroud)
这样,如果e集合中的IS没有采取行动.为什么返回a boolean而不是void方法更好?
我想维持一个List<Integer>大小<= 10 ^ 6 的有序.每次添加一个新元素时,我都会调用Collections.sort()方法对列表中的新元素进行排序.据我所知,ArrayList表现要好于LinkedList.但是由于我会sort()经常调用方法,所以我已经明白,linkedList在对列表进行排序时会表现得更好并且将是更好的选择ArrayList,因为没有像ArrayList(array作为底层数据结构使用)的情况那样移动元素.任何更有效的建议.
我与Java编程完全脱节,并且正在谷歌的Udacity课程作为复习.我正在浏览Sunshine应用程序的第1课,讲师通过声明一个字符串数组然后将其转换为ArrayList来选择创建虚假数据.
代码如下:
String[] data = {
"Mon 6/23?- Sunny - 31/17",
"Tue 6/24 - Foggy - 21/8",
"Wed 6/25 - Cloudy - 22/17",
"Thurs 6/26 - Rainy - 18/11",
"Fri 6/27 - Foggy - 21/10",
"Sat 6/28 - TRAPPED IN WEATHERSTATION - 23/18",
"Sun 6/29 - Sunny - 20/7"
};
List<String> weatherForecast = new ArrayList<>(Arrays.asList(data));
Run Code Online (Sandbox Code Playgroud)
我想知道使用这种转换方法有什么好处吗?为什么不立即将数据声明为ArrayList:
ArrayList weatherForecast = new ArrayList();
weatherForecast.add("Today - Sunny - 88/63");
weatherForecast.add("Tomorrow - Foggy = 70/46");
weatherForecast.add("Weds - Cloudy - 72/63");
weatherForecast.add("Thurs 6/26 - Rainy …Run Code Online (Sandbox Code Playgroud) 我准备在接下来的2个月进行OCPJP 8考试,目前我这个考试得到了我的注意,因为我不明白为什么
public class BiPredicateTest {
public static void main(String[] args) {
BiPredicate<List<Integer>, Integer> containsInt = List::contains;
List<Integer> ints = java.util.Arrays.asList(1,20,20);
ints.add(1);
ints.add(20);
ints.add(20);
System.out.println(containsInt.test(ints, 20));
BiConsumer<List<Integer>, Integer> listInt = BiPredicateTest::consumeMe;
listInt.accept(ints, 15);
}
public static void consumeMe(List<Integer> ints, int num) {
ints.removeIf(i -> i>num);
ints.forEach(System.out::println);
}
}
Run Code Online (Sandbox Code Playgroud)
这显然是编译好的!但是当你运行它时,你会看到这样的异常
C:\Users\user\Documents>javac BiPredicateTest.java
C:\Users\user\Documents>java BiPredicateTest
true
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.Collection.removeIf(Collection.java:415)
at BiPredicateTest.consumeMe(BiPredicateTest.java:22)
at BiPredicateTest.main(BiPredicateTest.java:17)
Run Code Online (Sandbox Code Playgroud)
我需要一些帮助来理解为什么asList方法不能与removeIf一起使用?我假设它将返回一个实现removeIf方法!的ArrayList实例.
任何答案将不胜感激.
干杯!
arraylist ×10
java ×10
arrays ×3
collections ×2
android ×1
hashmap ×1
iterator ×1
linked-list ×1
ocpjp ×1
performance ×1
sorting ×1
stream ×1
string ×1
tostring ×1