Java集合在Java语言生态的重要地位不可忽视,接下来让我们一探究竟。
Java集合
1. 背景
- 没有集合之前,Java已经可以存储对象,那就是
数组
。数组既可以存基本数据类型,也可以存同一种引用数据类型。对数组查找是高效的,但是数组一旦定义长度就不可变,而且只能存放同一种类型。
- 在程序设计的过程中,我们经常用到:队列、链接表、树和散列表等数据结构。没有集合前,如果我们需要用的,必须每次都自己定义非常麻烦,因此Java设计者就将这些数据结构封装起来提供给程序员使用。
2. Java集合的特点
高性能
。对于集合中的类,Java开发人员对其实现是高效的。一般很少人去改动这些已经很成熟其高效的API
抽象性
。集合类允许不同类型的集合以相同的方式和高度互操作方式工作;
扩展性
。集合类容易扩展和修改,程序员可以很容易地稍加改造就能满足自己的数据结构需求。
3. 集合的好处
降低了开发难度
。不必要再自己实现数据结构。
提高了运行速度
。集合类的内部实现是高效的
高抽象性
。借助泛型,只要了解了这些类的使用方法,就可以将它们应用到很多数据类型中。如果知道了LinkedList<String>
的使用方法,也会知道LinkedList<Double>
怎么用,则无需为每一种数据类型学习不同的API
高重用性
。借助泛型,就算对集合类中的元素类型进行了修改,集合类相关的代码也几乎不用修改。
4. Java集合框架
- Java集合框架包含两大类:集合(Collection)和图(Map)。
- Collection存放一个元素集合;Map存放键值对映射
1. Collection接口:
- 最基本的集合接口,存储一组不唯一,无序的对象。
- Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。
2. List接口:
- 有序、可重复Collection,可控制插入位置。
- 可以通过下标访问
3. Set接口
4. SortedSet接口
5. Map接口
- 存放一组
键值对
对象,提供key(键)到value(值)的映射。
6. Map.Entry
- 描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。
7. SortedMap
8. Enumeration
- 可以枚举(一次获得一个)对象集合中的元素。
- 被迭代器取代
注意:Set和List区别
Set |
List |
无序、不可重复 |
有序、可重复 |
查找效率低;删除和插入效率高 |
查找效率高。插入删除效率低 |
插入删除不会引起元素位置改变 |
动态增长。插入删除会引起元素位置改变 |
HashSet TreeSet |
ArrayList LinkedList Vector |
5. 集合使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| package top.tobing.collection; import java.util.ArrayList; import java.util.Iterator; import java.util.List;
public class Demo01CollArrayList { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("Hello"); list.add("World"); list.add("!"); for(String s:list) { System.out.print(s+" "); } System.out.println(); String[] strArr = new String[list.size()]; list.toArray(strArr); for(int i=0;i<strArr.length;i++) { System.out.print(strArr[i]+" "); } System.out.println(); Iterator<String> it = list.iterator(); while(it.hasNext()) { System.out.print(it.next()+" "); } } }
|
1 2 3
| Hello World ! Hello World ! Hello World !
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| package top.tobing.collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map;
public class Demo02CollMap { public static void main(String[] args) { Map<String,String> map = new HashMap<String,String>(); map.put("1","One"); map.put("2","Two"); map.put("3","Three"); map.put("4","Four"); for(String key:map.keySet()) { System.out.print(key+":"+map.get(key)+"\t"); } System.out.println(); Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); while(it.hasNext()) { Map.Entry<String, String> entry = it.next(); System.out.print(entry.getKey()+":"+entry.getValue()+"\t"); } System.out.println(); for(Map.Entry<String, String> entry:map.entrySet()) { System.out.print(entry.getKey()+":"+entry.getValue()+"\t"); } } }
|
1 2 3
| 1:One 2:Two 3:Three 4:Four 1:One 2:Two 3:Three 4:Four 1:One 2:Two 3:Three 4:Four
|