Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过索引从集合中获取值的最佳方法_Java_Collections - Fatal编程技术网

Java 通过索引从集合中获取值的最佳方法

Java 通过索引从集合中获取值的最佳方法,java,collections,Java,Collections,通过索引从java.util.Collection获取值的最佳方法是什么?使用函数将集合转换为数组 Object[] toArray(Object[] a) 一般来说,没有好办法,因为集合s不能保证有固定的索引。是的,您可以遍历它们,这就是阵列(和其他函数)的工作方式。但是迭代顺序不一定是固定的,如果你试图索引到一个普通的集合中,你可能做错了什么。索引到一个目录会更有意义。你不应该这样做。集合避免专门讨论索引,因为它可能对特定集合没有意义。例如,列表意味着某种形式的排序,而集合则不是 Col

通过索引从
java.util.Collection
获取值的最佳方法是什么?

使用函数将集合转换为数组

Object[] toArray(Object[] a) 

一般来说,没有好办法,因为
集合
s不能保证有固定的索引。是的,您可以遍历它们,这就是阵列(和其他函数)的工作方式。但是迭代顺序不一定是固定的,如果你试图索引到一个普通的集合中,你可能做错了什么。索引到一个目录会更有意义。

你不应该这样做。
集合
避免专门讨论索引,因为它可能对特定集合没有意义。例如,
列表
意味着某种形式的排序,而
集合
则不是

Collection<String> myCollection = new HashSet<String>();
myCollection.add("Hello");
myCollection.add("World");

for (String elem : myCollection) {
    System.out.println("elem = " + elem);
}

System.out.println("myCollection.toArray()[0] = " + myCollection.toArray()[0]);
同时:

myCollection = new ArrayList<String>();
myCollection.add("Hello");
myCollection.add("World");

for (String elem : myCollection) {
    System.out.println("elem = " + elem);
}

System.out.println("myCollection.toArray()[0] = " + myCollection.toArray()[0]);

你为什么要这样做?您可以不只是迭代集合吗?

您必须将集合包装在列表中(
new ArrayList(c)
),或者使用
c.toArray()
,因为集合没有“索引”或“顺序”的概念.

我同意Matthew Flaschen的回答,只是想展示一些您无法切换到列表的情况下的选项示例(因为库会返回一个集合):

如果你知道什么是泛型,我也可以提供样本

编辑:这是另一个问题,原始集合的意图和语义是什么。

您肯定想要一个:

列表接口提供了四种对列表元素进行位置(索引)访问的方法。 列表(如Java数组)是基于零的

请注意,这些操作的执行时间可能与某些情况下的索引值成比例 实现(例如LinkedList类)。因此,如果调用方不知道>列表中的元素,则在>列表中迭代元素通常比通过它进行索引更可取 实施

如果您需要索引来修改集合,请注意,列表提供了一种特殊的方法,允许您获取索引:

List<String> names = Arrays.asList("Davide", "Francesco", "Angelocola");
ListIterator<String> i = names.listIterator();

while (i.hasNext()) {
    System.out.format("[%d] %s\n", i.nextIndex(), i.next());
}
List name=Arrays.asList(“大卫”、“弗朗西斯科”、“安吉洛科拉”);
ListIterator i=names.ListIterator();
while(i.hasNext()){
System.out.format(“[%d]%s\n”,i.nextIndex(),i.next());
}

我同意这通常是个坏主意。但是,如果您真的需要,我们有一个很好的程序通过索引获取值:


只要在收藏更新时将其转换为列表,同样方便。但如果您正在初始化,这就足够了:

for(String i : collectionlist){
    arraylist.add(i);
    whateverIntID = arraylist.indexOf(i);
}
思想开放。

用于每个循环

ArrayList<Character> al = new ArrayList<>();    
String input="hello";

for (int i = 0; i < input.length(); i++){
    al.add(input.charAt(i));
}

for (Character ch : al) {               
    System.Out.println(ch);             
}
ArrayList al=new ArrayList();
String input=“hello”;
对于(int i=0;i
您可以使用for each循环或使用迭代器接口从集合中获取值。对于集合c

for(elem:c)
系统输出打印项次(elem)
或者使用迭代器接口

 Iterator it = c.iterator(); 
        while (it.hasNext()) 
        System.out.println(it.next()); 

如果库函数返回一个集合,那么我认为您不能保证该集合中元素的顺序。想必库调用返回一个集合正是因为它不希望您做出这些假设?这一点很好。OP没有分享关于他使用哪种图书馆的足够信息。有些库返回集合只是因为开发人员阅读了返回某些超级接口而不是具体实现的最佳实践。如果除了循环结果(如在AXIOM中)之外,不打算允许任何其他操作,则库可以返回Iterable。嗨@butterchicken,我的情况是,我使用linkedhashmap获取密钥集(这是一个集合)。我发现了这篇文章:这一组中的顺序是有保证的。我还不应该对它进行迭代吗?@jobbert你完全可以对它进行迭代。在本例中,您将获得一个
集合
,因为这是
映射
接口的契约。
List<String> names = Arrays.asList("Davide", "Francesco", "Angelocola");
ListIterator<String> i = names.listIterator();

while (i.hasNext()) {
    System.out.format("[%d] %s\n", i.nextIndex(), i.next());
}
for(String i : collectionlist){
    arraylist.add(i);
    whateverIntID = arraylist.indexOf(i);
}
ArrayList<Character> al = new ArrayList<>();    
String input="hello";

for (int i = 0; i < input.length(); i++){
    al.add(input.charAt(i));
}

for (Character ch : al) {               
    System.Out.println(ch);             
}
 Iterator it = c.iterator(); 
        while (it.hasNext()) 
        System.out.println(it.next());