一、集合的作用:
用来存储一堆元素,其中元素的数据类型可以不同,而且长度可变
二、集合体系架构:
Collection (单值存储) | Map | |
List 有序,添加顺序,可重复 | set 无序,不遵循添加顺序,无重复 | key-value 键值对 |
ArrayList | HashSet | HashMap |
LinkedList | ||
Vector (线程安全类 ) | TreeSet | Hashtable |
Stack |
三、主要Collection集合:ArrayList,HashSet,TreeSet
1.ArrayList集合:
List<String> list = new ArrayList<String>();
//添加元素
list.add("a");
list.add("e");
list.add("e");
list.add("11");
//集合长度
Sysout.out.println(list.size());
//取下标为1的元素
Sysout.out.println(list.get(1));
其方法可以看API帮助文档,里面有非常详细的讲解
总结一些数组和ArrayList集合的区别
集合的元素一旦被删除,后面的元素会串位
集合中size会根据实际元素的数量动态调整,而数组的长度无论元素怎么定义,都是固定的
2.HashSet集合:
特点:非线程安全类,元素无重复,无序性
其常用方法也可以查看API帮助文档
HashSet也可以存储自定义的类:默认情况下:自定义类是依靠对象来区分是否是同一元素,对象相同则认为是同一个元素,会出现覆盖,对象不同,就算属性相同也认为不是同一个元素,不会覆盖,所以HashSet集合存储对象时,一般会根据对象的覆盖条件,重写equals以及hashCode方法
无序性的产生原因:
是因为Hash表 HashSet底层就是用Hash表来实现的(无序无重复)
hash算法:元素在容器中存储时,判断其位置的一种算法
无重复性的产生原因:
每个元素根据自身的特性,利用hash算法来计算该元素在容器中的位置,以达到相同的元素的位置相同,不同元素的位置尽量不同的一种数据结构
Hash表适合于对元素的快速定位查找
缺点:在长度一定时Hash冲突在是一定会存在的
3.TreeSet集合:
特点:无序(但是可以遵循人为规定的顺序),无重复,所有存储在TreeSet集合中的对象必须实现Comparable接口
public class Person implements Comparable<Person>{
private int age;
public int getAge() {
return age;
}
public Person(int age){
this.age = age;
}
//返回值负数和正数并不决定大小
//决定了this是往前还是往后,如果返回值为负数则this更往前,反之this更往后
//降序
public int compareTo(Person p) {//用来判断元素在集合中的位置
//p 另外一个是要进集合的元素 , this 已存在于集合里的对象
if (this.age > p.age){//越小越往前
return -1;
}else if (this.age < p.age){
return 1;
}else{
return 0;
}
}
public static void main(String[] args) {
//TreeSet集合中评判元素是否相等用的compareTo返回值为0
Set<Person> set = new TreeSet<Person>();
set.add(new Person(10));
set.add(new Person(20));
set.add(new Person(15));
set.add(new Person(8));
set.add(new Person(22));
for (Person p : set){
System.out.println(p.getAge());//8 10 15 20 22
}
}
}
四、Map集合(key-value 键值对):
1.HashMap:
特点:相同的键合并,与值无关
核心方法:可以查看API帮助文档
1. V put(K key, V value)
2. V get(Object key) 获取某个键所对应的值,如果值不存在则返回null
3. V remove(Object key)删除某个键与其对应的值
4. int size() Map集合的长度
5. boolean containsKey(Object key) 返回一个布尔类型的值,是否包含所输入的键
6. boolean containsValue(Object value) 返回一个布尔类型的值,是否包含所输入的值
7. Set<K> keySet() 获取全部的键,并形成一个Set集合
2.TreeMap:
特点:TreeMap特点:键有序,与值无关
核心方法:可以查看API帮助文档,与HashMap类似
1. V put(K key, V value)
2. V get(Object key) 获取某个键所对应的值,如果值不存在则返回null
3. V remove(Object key)删除某个键与其对应的值
4. int size() Map集合的长度
5. boolean containsKey(Object key) 返回一个布尔类型的值,是否包含所输入的键
6. boolean containsValue(Object value) 返回一个布尔类型的值,是否包含所输入的值
7. Set<K> keySet() 获取全部的键,并形成一个Set集合
本人会定期发表关于Java的相关知识,如果有错误请指出,觉得好请点赞,收藏加关注,谢谢!!