java提供了一种可以存数一组数据的数据结构,其提供了丰富的方法,在实际开发中往往比数组使用的广泛。这种数据结构成为集合:Collection。
Collection是一个接口,其定义了集合的相关功能方法。
List接口是Collection的子接口,用于定义线性表数据结构;
可以将List理解为存放对象的数组,只不过其元素个数可以动态的增加或减少。并且List是可重复集.
List接口的两个常见实现类为ArrayList和LinkedList,分别用动态数组和链表的方式实现了List接口。
可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别,ArrayList更适合于随机访问而LinkedList更适合于插入和删除;在性能要求不是特别苛刻的情形下可以忽略这个差别。
4.1List接口——有序集合类279
4.1.1add方法——向列表中插入元素279
List<String> list =newArrayList<String>();
list.add("java");
list.add("cpp");
list.add("php");
list.add("c#");
list.add("objective-c");
4.1.2addAll方法——将指定collection添加到列表中280
List<String> list =newArrayList<String>();
list.add("java");
list.add("cpp");
list.add("php");
list.add("c#");
list.add("objective-c");//addAll方法用于将给定集合中的所有元素添加到当前集合中List<String> list2 =newArrayList<String>();
list2.addAll(list);
System.out.PRintln(list2);
4.1.3clear方法——从列表中移除所有元素282
4.1.4contains方法——判断列表中是否包含指定元素283
4.1.5containsAll方法——判断列表中是否包含指定collection所有元素283
4.1.6equals方法——比较指定的对象与列表是否相等285
4.1.7get方法——获取列表指定位置的元素285
4.1.8set方法——替换列表中指定位置的元素286
List<String> list =newArrayList<String>();
list.add("java");
list.add("cpp");
list.add("php");
list.add("c#");
list.add("objective-c");//get方法遍历Listfor(inti = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
String value= list.set(1, "c++");
System.out.println(value);//cppSystem.out.println(list);//[java, c++, php, c#, objective-c]//交换位置1和3上的元素list.set(1, list.set(3, list.get(1)));
System.out.println(list);//[java, c#, php, c++, objective-c]
4.1.9hashCode方法——返回列表的哈希码值287
4.1.10indexOf方法——返回第一次出现指定元素的位置287
4.1.11lastIndexOf方法——返回最后一次出现指定元素的位置288
4.1.12isEmpty方法——判断集合是否为空289
4.1.13iterator方法——返回迭代器290
4.1.14listIterator方法——返回列表迭代器290
Collection提供了一个遍历集合的通用方式,迭代器(Iterator)。获取迭代器的方式是使用Collection定义的方法:
迭代器Iterator是一个接口,集合在覆盖Collection的iterator()方法时提供了迭代器的实现。
Iterator提供了统一的遍历集合元素的方式。
迭代器用于遍历集合的两个主要方法:
boolean hasNext():判断集合是否还有元素可以遍历。E next():返回迭代的下一个元素遍历集合应遵循“先问后取”的方式,也就是说,应当在确定hasNext()方法的返回值为true的情况下再通过next()方法取元素。
由此可以看出,使用迭代器遍历集合是通过boolean值驱动的,所以它更适合使用while循环来遍历。
Collection<String> c =newHashSet<String>();
c.add("java");
c.add("cpp");
c.add("php");
c.add("c#");
c.add("objective-c");
Iterator<String> it =c.iterator();while(it.hasNext()) {
String str=it.next();
System.out.println(str);
}
4.1.15remove方法——移除列表中的指定元素292
4.1.16removeAll方法——从列表中移除指定collection包含的所有元素293
List<String> list =newArrayList<String>();
list.add("java");
list.add("c#");
System.out.println(list);//[java, c#]list.add(1, "cpp");
System.out.println(list);//[java, cpp, c#]list.remove(2);
System.out.println(list);//[java, cpp]list.removeAll(list);
System.out.println(list);
4.1.17retainAll方法——保留指定collection包含的所有元素294
4.1.18size方法——返回列表中元素的个数294
4.1.19subList方法——获取列表中指定范围的子列表295
List的subList方法用于获取子List。需要注意的是,subList获取的List与原List占有相同的存储空间,对子List的操作会影响的原List。
List<Integer> list =newArrayList<Integer>();for(inti = 0; i < 10; i++) {
list.add(i);
}
System.out.println(list);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]List<Integer> subList = list.subList(3, 8);
System.out.println(subList);//[3, 4, 5, 6, 7]//subList获得的List和源List占有相同的数据空间for(inti = 0; i < subList.size(); i++) {
subList.set(i, subList.get(i)* 10);
}
System.out.println(subList);//[30, 40, 50, 60, 70]System.out.println(list);//[0, 1, 2, 30, 40, 50, 60, 70, 8, 9]//可以用于删除连续元素list.subList(3, 8).clear();System.out.println(list);
4.1.20toArray方法——返回所有元素的数组296
List的toArray方法用于将集合转换为数组。但实际上该方法是在Collection中定义的,所以所有的集合都具备这个功能。
我们可以传入一个指定类型的数组,该数组的元素类型应与集合的元素类型一致。返回值则是转换后的数组,该数组会保存集合中所有的元素。
List<String> list =newArrayList<String>();
list.add("a");
list.add("b");
list.add("c");//通常我们传入的数组不需要给定长度String[] strArr = list.toArray(newString[] {});
System.out.println(Arrays.toString(strArr));//[a, b, c]
数组转化为list
//方法一String[] strArr = { "a", "b", "c"};
List<String> list =Arrays.asList(strArr);
System.out.println(list);//[a, b, c]//list.add("d");//会抛出UnsupportedOperationException//java.util.Arrays$ArrayListSystem.out.println(list.getClass().getName());//方法二List<String> list1 =newArrayList<String>();
list1.addAll(Arrays.asList(strArr));
list1.add("d");
System.out.println(list1);
4.2Map接口——映射集合类297
4.2.1clear方法——移除所有映射关系297
4.2.2containsKey方法——判断是否包含指定的键名298
4.2.3containsValue方法——判断是否包含指定的键值298
4.2.4equals方法——判断是否与指定的对象相同299
4.2.5get方法——返回指定键所映射的值300
4.2.6isEmpty方法——判断是否为空300
4.2.7keySet方法——获取Map集合的所有key301
4.2.8put方法——向指定索引位置添加对象301
4.2.9putAll方法——追加另一个Map对象到当前Map集合302
4.2.10remove方法——移除Map集合中指定键名的内容303
4.2.11size方法——获取Map集合类的大小304
4.2.12values方法——获取Map集合中所有键值对象304
4.3Set接口——无重复元素集合类305
4.3.1add方法——向Set集合中添加对象305
4.3.2addAll方法——向Set集合添加另一个集合的所有内容306
4.3.3clear方法——从Set集合中移除所有内容307
4.3.4contains方法——判断Set集合是否包含指定对象307
4.3.5containsAll方法——判断Set集合是否包含另一个集合中全部对象308
4.3.6equals方法——比较指定对象与此Set是否相等309
4.3.7isEmpty方法——判断Set集合是否为空309
4.3.8iterator方法——获取Set集合的迭代器310
4.3.9remove方法——移除Set集合中指定对象311
4.3.10removeAll方法——移除另一个集合所包含的所有内容311
4.3.11retainAll方法——保留另一个集合所包含的所有内容312
4.3.12size方法——获取Set集合类的大小313
4.3.13toArray方法——用Set集合的所有对象创建数组313