-
什么是集合?有什么用?
数组其实就是一个集合。集合实际上是一个容器。用来容纳其他类型的数据。
集合在开发中的使用?
集合是一个容器,可以一次容纳多个对象,在实际开发中,将java对象放到某一个集合中,将集合传到前端,然后遍历集合,将数据显示出来。
-
集合不能直接存储基本数据类型,集合中存储的是java对象的内存地址。
list.add(100);//自动装箱Integer
注意:集合在java中本身是一个容器,是一个对象。
集合中任何时候存储的都是引用。
-
java中每一个不同集合,底层对应不同的数据结构,往不同的集合中存储元素,等于将数据放到了不同的数据结构中。例如:数组,二叉树,链表,哈希表
new ArrayList();//底层是数组 new LinkedList();//底层是链表 new TreeSet();//底层是二叉树 new HashMap();//底层是哈希表
-
所有的集合在java.util包下
-
集合分为两大类:
-
一种是单个方式存储元素:
单个方式存储元素,这一类集合超级父接口是:java.util.Collection
-
一种是以键值对的方式存储元素:
这一类集合超级父接口是:java.util.Map
-
-
集合的继承结构图
总结(所有的实现类):
- ArrayList:底层是数组。
- LinkedList:底层是双向链表。
- Vector:底层是数组,线程安全的,效率较低,使用较少。
- HashSet:底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合key部分了。
- TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到TreeMap集合key部分了。
- HashMap:底层是哈希表。
- Hashtable:底层也是哈希表,线程安全的, 效率较低,使用较少
- Properties:是线程安全的,并且key和value只能存储字符串String。
- TreeMap:底层是二叉树。TreeMap集合的key可以自动按照大小顺序排序
List集合存储元素的特点:
有序可重复:
- 有序:存进去的顺序和取出的顺序相同,每一个元素都有下标。
- 可重复:存进去1,可以再存储一个1
Set(Map)集合存储元素的特点:
无序不可重复:
- 无序:存进去的顺序和取出的顺序不一定相同。Set集合中元素没有下标。
- 不可重复:存进去1,不能再存储1了。
SortedSet(SortedMap)集合存储元素的特点:
首先是无序不可重复的,但是SortedSet集合中的元素是可排序的。
- 无序:存进去的顺序和取出的顺序不一定相同。另外Set集合中元素没有下标。
- 不可重复:存进去1,不能再存储1了。
- 可排序:可以按照大小顺序排列。
Map集合的key,就是一个Set集合。
往Set集合中放数据,实际上放到了Map集合的key部分。
泛型
-
jdk5之后推出的新特性:泛型
-
泛型语法机制只在程序编译阶段起作用,运行阶段没用
-
使用了泛型好处是什么?
- 集合中存储的元素类型统一了
- 从集合中取出的元素类型是泛型指定的类型,不需要向下转型
-
泛型的缺点是什么?
导致集合中存储的元素缺乏多样性!
大多数业务中,集合中元素的类型还是统一的。所以这种特性广受认可。
-
Jdk8之后
-
ArrayList<这里的类型会自动推断>
List<Animal> list=new ArrayList<>();
List<Animal> list=new ArrayList();//可以省略<>
自定义泛型
自定义泛型时,<>中的是一个标识符,随便写
java源代码中出现的:和
E是Element单词首字母。元素
T是Type单词首字母。类型
public class Test<标识符随便写>{//标识符相当于形参,通常写E
public void doSome(标识符随便写 o){
System.out.println(o);
}
}
Test<String> t=new Test();//泛型指定了String
t.doSome("123");//只能放入String类型
for(String i,t){//增强for循环输出集合元素
System.out.println(i);
}
Test t=new Test();//不使用,默认Object类型
t.doSome(new Object());