集合Collection概述
-
集合与数组区别
- 数组长度固定,集合长度可变
- 数组存放基本类型数据,集合存放对象的引用
-
集合关系
- Collection
- List:ArrayList、LinkedList
- Set:HashSet、LinkedHashSet、TreeSet
- Map
- HashMap
- TreeMap
- Collection
-
集合接口方法
方法 功能 add() 添加元素到集合 remove() 移出元素 isEmpty() 判断当前集合时候为空 iterator() 返回集合迭代器 size() 返回集合元素个数
List集合接口
- 元素允许重复
- 元素顺序就是插入顺序
-
特有方法
方法 功能 get(int index) 获得索引位置的元素 set(int index, Object obj) 将指定位置的元素设置为指定对象 -
实现类
-
ArrayList:数组实现,用于随机访问
class ListDemo { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.remove(2); list.set(1, "d"); //for遍历 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } //迭代器 Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } }
-
LinkedList:链表实现,用于插入和删除。可用来实现栈和队列
-
特有方法
方法 含义 addFirst()/addLast() 添加首部/尾部元素 getFirst()/getLast() 获取首部/尾部元素 removeFirst()/removeLast() 移出首部/尾部元素
class ListDemo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<String>(); linkedList.addFirst("a"); linkedList.addFirst("b"); linkedList.addFirst("c"); System.out.println(linkedList.getFirst()); System.out.println(linkedList.peek()); Iterator<String> iterator = linkedList.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } }
c
c
c
b
a -
-
Set集合接口
- 元素不能重复
- 存取无序、无下标
-
实现类
-
HashSet:哈希表实现,存储自定义对象时,必须重写hasCode和equals方法
class ListDemo { public static void main(String[] args) { Set<String> set = new HashSet<String>(); set.add("a"); set.add("b"); set.add("b"); set.add("c"); Iterator<String> iterator = set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } }
a
b
c -
TreeSet:二叉树实现,元素唯一,可以进行排序(在添加的时候进行排序)
class ListDemo { public static void main(String[] args) { TreeSet<String> treeSet = new TreeSet<String>(); treeSet.add("a"); treeSet.add("c"); treeSet.add("b"); for (String str : treeSet) { System.out.println(str); } } }
//输出有序
ab
c
-
Map集合
- 键值对;键唯一,值可重复
- 存取无序
-
Map接口方法
方法 功能 put(key, value) 向集合中添加指定的key-value映射关系 containsKey(key) 判断集合中包含指定的key containsValue(value) 判断集合中包含指定的value get(key) 获取key对应的value值 keySet() 返回所有key对应的Set集合 values() 返回包含所有值的Collection集合 entrySet() 所有键值对集合 -
实现类
-
HashMap:哈希表实现,存储对象时,必须重写hasCode和equals方法
public class Demo{ public static void main(String[] args) { HashMap<String, String> hashMap = new HashMap<>(); hashMap.put("A", "java"); hashMap.put("B", "C++"); hashMap.put("C", "python"); //遍历1 for (String key : hashMap.keySet()) { System.out.println("key="+key + " and value=" + hashMap.get(key)); } //遍历2 Iterator<Map.Entry<String, String>> iterator = hashMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, String> entry = iterator.next(); String key = entry.getKey(); String value = entry.getValue(); System.out.println(key + "-" + value); } } }
HashMap的遍历
-
keySet():循环
-
entrySet():迭代
Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value(每个entry都是Map);
entrySet()返回就是这个map中各个键值对映射关系的集合
-
-
LinkedHashMap:链表和哈希表实现,存取有序
public class Demo{ public static void main(String[] args) { LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>(); linkedHashMap.put("A", "Java"); linkedHashMap.put("B", "C++"); linkedHashMap.put("C", "Python"); //遍历1 Set<String> set = linkedHashMap.keySet(); for (String key : set) { System.out.println("key=" + key + " value=" + linkedHashMap.get(key)); } //遍历2 Iterator<Map.Entry<String, String>> iterator = linkedHashMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, String> entry = iterator.next(); String key = entry.getKey(); String value = entry.getValue(); System.out.println("key=" + key + " value=" + linkedHashMap.get(key)); } } }
-