为什么出现集合类
为了方便对多个对象的操作,对对象进行存储,集合就是存储对象最常用的一种方式。
好了,集合的存在就是为了方便存储对象!这是其本质用途!!
数组和集合的不同
------- | 数组 | 集合 |
---|---|---|
长度 | 不可变 | 可变 |
存储 | 基本数据类型 | 存储对象 |
类型 | 同一种 | 多种 |
常见体系
抽取容器的共性,我们得到了集合框架,常用的有三种:
Map | Collection(interface) | 算法Collections(class) |
---|---|---|
map | List/Set | collection(s)都位于java.util下 |
HashMap | ArrayList,LinkedList/HashSet,TreeSet | 提供了对集合进行排序、遍历等多种算法实现 |
Collection下的集合都可以调用一个迭代器iterator来实现集合的读取,比如:
Iterator it = collection.iterator();
while(it.hasnext()){
System.out.print(it.next);//输出下一个元素
}
-
List:有序列表,允许存放重复的元素
ArrayList:数组实现,需要一块连续的存储空间,查询快,增删慢,不同步,线程不安全,轻量级;(顺序存储、应用于有大量查询操作的场景中) LinkedList:链表实现,增删快,查询慢; (链表存储、应用于有大量修改操作的场景中)
-
Set:元素不重复,且无序。
1)HashSet(调用HashMap):(1)底层使用数据结构的hash算法实现的,因此具有很好的存取,查找的性能。 (2)hashSet是线程不安全,所以它相对于线程安全的更快一些。 (3)hashSet值可以为null。 (4) 不存在顺序
2)TreeSet(树结构)
1. 实现Comparable接口 2. 2.重写接口中的 comparableTo() 方法,编写你想要的排序规则
@Override
public int compareTo(Person o) {
int num = this.age - o.getAge();
return (num==0) ? this.name.compareTo(o.getName()):
this.age - o.getAge();
//另一种写法
if (num == 0){
return this.name.compareTo(o.getName());//String下的比较方法,返回一个int类型的值
}
else{
return num ;
}
//默认从小到大排序
-
Map
Map和List在java开发中是常用的集合,他们都基于java.util之中;Map集合用于存储一对元素,<key,value>,并通过key映射到value。
特性:一个key只能有一个value与之对应,通过key来调用value。
常用语法1. map.put(key,value);输入值 2. map.size();获取长度,对象个数 3. map.values();获取集合中所有的值 4. map.keySet();获取map集合所有的键(key) 5. map.get(key);//获取与输出key相对应的value,若key或value为空则返回null 6. map.remove(key)//删除该key和该key对应value 7. 6.map.clear();清空map 8. Entry接口;是一个封装map中(key和value)的接口 9. map1.putAll(map2);把map2合并到map1之中,若key相同则用map的value覆盖