集合
1. 集合框架的概述
集合、数组都是对多个数据进行存储操作的结构,简称Java容器。
1.1 Collection接口:单列集合,用来存储一个一个的对象。
1.1.1 List接口:存储有序的、可重复的数据。(动态数组)
(1) ArrayList:作为List接口的主要实现类;线程不安全,效率高。底层使用Object[ ]存储。
(2) LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储。
(3) Vector:作为List接口的古老实现类;线程安全,效率低。底层使用Object[ ]存储。
1.1.2 Set接口:存储无序的、不可重复的数据。(数学中的集合)
(1) HashSet:作为Set接口的主要实现类;线程不安全;可以存储null值。
(2) LinkedHashSet:作为HashSet的子类,在添加数据的同时,每个元素还保存了前继(前一个元素)和后继(后一个元素)的引用;遍历内部数据时,可以按照添加的顺序遍历。对于频繁的遍历操作,LinkedHashSet效率高于HashSet。
(3) TreeSet:可以按照添加对象的指定属性,进行排序。
1.2 Map接口:双列集合,用来存储一对(key,value)的数据。(数学中的函数:y=f(x) )
(1)HashMap
(2)LinkedHashMap
(3)TreeMap
(4)Hashtable
(5)Properties
1.3 集合元素的遍历
1.3.1 迭代器方式
Collection list = new ArrayList<>(); list.add("C"); list.add("C++"); list.add("Java"); list.add("Python"); list.add("JavaScript"); Iterator iterator = list.iterator(); while (iterator.hasNext()){ //next():(1)指针下移。(2)将下移后所在位置的元素返回。 System.out.println(iterator.next()); }
1.3.2 增强for循环
Collection list = new ArrayList<>(); list.add("C"); list.add("C++"); list.add("Java"); list.add("Python"); list.add("JavaScript"); for (Object o : list) { System.out.println(o); }
1.3.3 普通for循环
ArrayList list = new ArrayList<>(); list.add("C"); list.add("C++"); list.add("Java"); list.add("Python"); list.add("JavaScript"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }