Java集合
1.集合的继承体系
- Collection存放的是放单个的元素,可重复出现
- Map存放的是键值对,只能出现一次
2.Collection接口的常用方法
-
添加功能
boolean add (Object obj):添加一个元素
boolean addAll(Collection c) : 添加一个集合的元素
-
删除功能
void clear():移除一个元素
boolean remove(Object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有)
-
判断功能
boolean contains(Object o):判断集合中是否包含指定元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有)
boolean isEmpty():判断集合是否为空
-
获取功能
Iterator iterator()(重点)
-
长度功能
int size():元素的个数
-
交集功能
boolean retainAll(Collection c):两个集合都有的元素,元素到了第一个集合中,返回的boolean是如果,有相同的元素赋值给第一个几个,为真
-
把集合转换为数组
代码示例:
//添加一个元素 collection.add(6); System.out.println(collection); //添加所有元素 Collection collection2 = new ArrayList(); collection2.add(1); collection2.addAll(collection); collection2.clear(); //清除所有 System.out.println(collection2); //移除一个元素 collection.remove(6); System.out.println(collection); //移除一个集合的元素 collection.removeAll(collection); System.out.println(collection); //判断集合中是否包含指定元素 System.out.println(collection2.contains(1)); //判断集合中是否包含指定的集合元素 System.out.println(collection.containsAll(collection));、 //判断集合是否为空 System.out.println(collection.isEmpty()); //集合长度 System.out.println(collection2.size()); //交集 //如果collection2与collection有交集,会把交集全部放到collection2里面,然后把collection2删掉,如果collection2的值变化过就返回的ture没变化就返回false System.out.println(collection2.retainAll(collection)); //集合转换为数组 Object object = collection.toArray(); //数组转换为集合 int []a = {8}; Arrays.asList(a);
3.Iterator迭代器
-
Iterator对象称为迭代器,主要用于遍历 Collection 集合中的元素,这是集合独有的遍历方式
-
所有实现了 Collection 接口的集合类都有一个 iterator() 方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器
-
Iterator 仅用于遍历集合,Iterator 本身并不存放对象
- while
- for
//迭代器 获取集合迭代器 Iterator iterator = collection.iterator(); //判断下一行是否有值 //while循环 while (iterator.hasNext()) { //输出值 且光标挪到下一行 System.out.println(iterator.next()); } //如果有两个next会报错元素异常(NoSuchElementException) Iterator iterator = null ; //for循环 for (iterator = collection.iterator();;iterator.hasNext()) { System.out.println(iterator.next()); }
4.List (子接口)
-
List list = new ArrayList(); list.add(5); list.add(6); list.add(7); list.add(5); System.out.println(list);
-
List集合的特有功能:
1.添加功能
void add (int index,Obkect element):在指定位置添加元素 // 重载的方法
2.获取功能
Object get(int index):获取指定位置元素
3.列表迭代器
Listlterator listlterator():List集合特有的迭代器
4.删除功能
Object remove(int index):根据索引删除元素,返回被删除的元素
5.修改功能
Object set(int index,Object element):根据索引修改元素,返回被修饰的元素
5.常见数据结构
-
-
链表:不连续,中间用箭头指向
-
队列: 先进先出
-
栈: 先进后出
-
堆:
-
树: 二叉树 数字小的左边放,数字大的右边放
-
6.实现类
-
ArrayList:
底层数据结构是数组,查询快,增删慢。线程不安全,效率高。
-
Vector:
底层数据结构是数组,查询快,增删慢。线程安全,效率低。
-
LinkedList:
底层数据结构是链表,查询慢,增删快。线程不安全,效率高。
-
LinkedList独有方法:模拟栈操作
7.泛型
- “泛型”的字面意思就是广泛的类型。类、接口和方法代码可以应用于非常广泛的类型,代码与它们能够操作的数据类型不再绑定在一起,同一套代码可以用于多种数据类型,这样不仅可以复用代码,降低耦合性,而且还提高了代码的可读性以及安全性。jdk1.5提供
- 把运行时期的问题提前到了编译期
- 避免强制类型转换
- 优化程序设计
8.foreach循环
for(元素数据类型 变量 : 数组或者Collection集合) {使用用变量即可,该变量就是元素}
Arraylist<Integer> list=new Arrayist<Integer>(); for(Integer a:list){ system.out.println(a); } //循环前先判断是否为null
9.Set子接口
无序,不允许重复
-
hashset
-
不保证顺序
-
底层数据结构是哈希表
-
-
linkedhashset
-
-
哈希表保证唯一性,链表保证有序
-
-
treeset
-
可以排序
-
使用元素自然排序
-
使用Comparator
-
-
代码示例:
//HashSet HashSet<String> set=new HashSet<>(); set.add("123"); set.add("456"); set.add("123"); set.add("sggb"); System.out.println(set); //LinkedHashSet Set<String> set=new LinkedHashSet<>(); set.add("123"); set.add("456"); set.add("fdsag"); set.add("456"); for(String s:set) { System.out.println(s); //123,456,fdsag } //TreeSet Set<String> set=new TreeSet<String>(); set.add("123"); set.add("789"); set.add("234"); set.add("456"); set.add("456"); for(String s:set) { System.out.println(s); //123,234,456,789 }
10.Map
- Map和Collection的区别
-
map存储元素是成对出现的,键是唯一的,值可重复
-
Collection存储元素是单独的
-
map集合的数据结构只针对键有效,和值无关
-
Collection的数据结构针对元素有效
-
-
Map的功能:
1:添加功能
V put(K key,V value):添加元素。这个其实还有另一个功能
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
2:删除功能
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
3:判断功能
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
4:获取功能
Set<Map.Entry<K,V>> entrySet():???
V get(Object key):根据键获取值
Set keySet():获取集合中所有键的集合
Collection values():获取集合中所有值的集合
5:长度功能
int size():返回集合中的键值对的对数
代码示例:
Map<Integer, String> map = new HashMap<Integer, String>(); // 添加功能 map.put(1001, "张三"); map.put(1002, "李四"); map.put(1003, "Tom"); map.put(1004, "Jack"); System.out.println(map); //删除功能 System.out.println(map.remove(1004)); System.out.println(map); //判断功能 System.out.println(map.containsKey(1004)); //false 已经把1004删除掉了 System.out.println(map.containsKey(1002)); //true System.out.println(map.containsValue("李四"));//集合是否包含指定的值 System.out.println(map.isEmpty()); //集合是否为空 //获取功能 System.out.println(map.get(1001));//根据键获取值 //获取map集合 Set<Map.Entry<Integer, String>> set = map.entrySet(); Iterator<Map.Entry<Integer, String>> iterator = set.iterator(); //用迭代器输出 while(iterator.hasNext()) { Map.Entry<Integer, String> entry = iterator.next(); System.out.println(entry.getKey()+"----"+entry.getValue()); } //获取集合中所有键的集合 Set<Integer> set2 = map.keySet(); for(Integer aaa:set2) { //通过键找到值 String vaule = map.get(s1); System.out.println(aaa); } //获取集合中所有值的集合 Collection <String> list = map.values(); System.out.println(list); //长度 System.out.println(map.size());
11.实现类
- HashMap
- 键是哈希表结构,可以保证键的唯一性
- LinkedHashMap
- Map接口的哈希表和链接列表实现,具有可预知的迭代顺序
- TreeMap
- 键是红黑树结构,可以保证键的排序和唯一性
12.Collections
Collections:是针对集合进行操作的工具类,都是静态方法
-
面试题
- Collection:是单列集合的顶层接口,有子接口List和Set。
- Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法
- HashMap线程不安全,效率高
- Hashtable线程安全,效率低
3.List,Set,Map等接口是否都继承子接口
- List,Set它们继承Collection接口
- Map接口本身就是一个接口


浙公网安备 33010602011771号