java基础--32.集合框架 Collection
Posted 大数据小小罗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础--32.集合框架 Collection相关的知识,希望对你有一定的参考价值。
1.集合
先来讲一讲对象数组 数组可以存储基本数据类型,也可以存储引用类型。它存储 引用类型的时候,数组就叫做对象数组
集合的由来:java中存储对象数据中有数组和StringBuffer,但是使用数组存储对象的缺陷是长度固定,所以不适合变化的需求,于是,java及提供了集合供我们使用
1.1 集合与数组的区别:
A 长度:
数组是固定长度,集合是可变长度
B.内容区别
数组可以存储基本类型和引用类型,而集合只能存储引用类型
C.元素内容
数组只能存储同一种类型,集合可以存储不同的类型(但通常只用于存储一种类型)
1.2 集合类的继承结构:
Collection接口的功能概述:
Collection:是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的,有无序的。(后面会慢慢的讲解)
1:添加功能
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素
2:删除功能
void clear():移除所有元素
boolean remove(Object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有),只要有一个元素被移除了,就返回true。
3:判断功能
boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有)
boolean isEmpty():判断集合是否为空
4:遍历功能
Iterator<E> iterator()(重点)
5:长度获取功能
int size():元素的个数
面试题:数组有没有length()方法呢?字符串有没有length()方法呢?集合有没有length()方法呢?
6:交集功能
boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢?
假设有两个集合A,B。
A对B做交集,最终的结果保存在A中,B不变。
返回值表示的是A是否发生过改变。
7:把集合转换为对象数组
Object[] toArray()
2.集合List
ArrayList
底层数据结构是**数组**,查询快,增删慢。
线程**不安全**,效率高。
Vector
底层数据结构是**数组**,查询快,增删慢。
线程**安全**,效率低。
LinkedList
底层数据结构是**链表**,查询慢,增删快。
线程**不安全**,效率高。
分析:要安全吗?
要:Vector(即使要,也不使用这个,后面再说)
不要:ArrayList或者LinkedList
查询多;ArrayList
增删多:LinkedList
什么都不知道,就用ArrayList。
3.集合Set
(1)Set集合的特点
无序,唯一
(2)HashSet集合(掌握)
A:底层数据结构是哈希表(是一个元素为链表的数组)
B:哈希表底层依赖两个方法:hashCode()和equals()
执行顺序:
首先比较哈希值是否相同
相同:继续执行equals()方法
返回true:元素重复了,不添加
返回false:直接把元素添加到集合
不同:就直接把元素添加到集合
C:如何保证元素唯一性的呢?
由hashCode()和equals()保证的
D:开发的时候,代码非常的简单,自动生成即可。
E:HashSet存储字符串并遍历
F:HashSet存储自定义对象并遍历(对象的成员变量值相同即为同一个元素)
(3)TreeSet集合
A:底层数据结构是红黑树(是一个自平衡的二叉树)
B:保证元素的排序方式
a:自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
b:比较器排序(集合具备比较性)
让集合构造方法接收Comparator的实现类对象
C:把我们讲过的代码看一遍即可
(4)案例:
A:获取无重复的随机数
B:键盘录入学生按照总分从高到底输出
4.Map(掌握)
(1)将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
(2)Map和Collection的区别?
A:Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对
B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍
(3)Map接口功能概述
1:添加功能
V put(K key,V value):添加元素。这个其实还有另一个功能?先不告诉你,等会讲
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
2:删除功能
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
3:判断功能
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
4:获取功能
Set<Map.Entry<K,V>> entrySet():???
V get(Object key):根据键获取值
Set<K> keySet():获取集合中所有键的集合
Collection<V> values():获取集合中所有值的集合
5:长度功能
int size():返回集合中的键值对的对数
(4)Map集合的遍历
A:键找值
a:获取所有键的集合
b:遍历键的集合,得到每一个键
c:根据键到集合中去找值
B:键值对对象找键和值
a:获取所有的键值对对象的集合
b:遍历键值对对象的集合,获取每一个键值对对象
c:根据键值对对象去获取键和值
方式2 键值对对象找键和值
Set<Map.Entry<String,String>> set2 = hm.entrySet();
for(Map.Entry<String,String> me : set2)
String key = me.getKey();
String value = me.getValue();
System.out.println(key+"---"+value);
集合使用Comparator接口的排序
TreeSet<Student> s = new TreeSet<Student>(new Comparator<Student>()
@Override
public int compare(Student s1, Student s2)
int num0 = s1.getName().length() - s2.getName().length();
int num1 = num0==0? s1.getName().compareTo(s2.getName()):num0;
int num2 = num1==0? s1.getAge() - s2.getAge() :num1;
return num2;
);
5.Collections工具类的使用方法
(1)是针对集合进行操作的工具类,都是静态的方法
(2)面试题:Collection和Collections的区别
A:Collection 是单列集合的顶层接口,有两个子接口List和Set
B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等
(3)常见的几个小方法:
A: public static <T> void sort(List<T> list)
B: public static <T> int binarySearch(List<?> list,T key)
C: public static <T> T max(Collection<?> coll)
D: public static void reverse(List<?> list)
E: public static void shuffle(List<?> list)
以上是关于java基础--32.集合框架 Collection的主要内容,如果未能解决你的问题,请参考以下文章