一、 集合的定义
1.集合类存放于java.util包中。
2.集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用
3.集合的类型主要有三种:
(1)set(集)
(2)list(列表)
(3) map(映射)
4.集合接口
(1)Collection
(2)Map
集合树
set(集)
Set(集)是一种最简单的集合,实现Set接口,他的对象不按特定方式排序,只是简单地把对象加入集合中,就像往口袋里放东西。
对Set中的成员的访问操作是通过集中对象的引用进行的,所以Set中不能有重复的对象
1.Set的实现的基础是Map(HashMap)
2.Set中元素是不能重复的,如果使用add()方法添加已经存在的对象则会覆盖前面的对象
下边我们进行一下简单的操作
//创建HashSet对象
HashSet<String> hs = new HashSet<String>();
//给集合中添加自定义对象
hs.add("张三");
hs.add("李四");
hs.add("王麻子");
hs.add("张三");
//取出集合中的每个元素
Iterator<String> it = hs.iterator();
while (it.hasNext()) {
String set = it.next();
System.out.println(set);
输出结果如下:
由此结果我们可得知集合中不能存储中重复的元素
List(列表)
List的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,但是他与完全无序的集是不同的
列表在数据结构中分别表现为:
(1)数组
(2)向量
(3)链表
(4)堆栈
(5)队列
List接口常用的子类有:
1.ArrayList集合
2.LinkedList集合
常用方法:
代码演示
//创建一个ArrayList
List<String> list = new ArrayList<String>();
//1,添加元素。
list.add("小红");
list.add("小梅");
list.add("小强");
//2,插入元素。
list.add(1, "老王");
//3,删除元素。
list.remove(2)
//4,修改元素。
list.set(1, "隔壁老王")
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
System.out.println("=======================---------------=========");
//由于List集合拥有索引,因此List集合迭代方式除了使用迭代器之外,还可以使用索引进行迭代。
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
System.out.println(str);
}
输出结果为:
Map(映射)
Map与Set或者List有着明显的区别,映射中每个项都是以(key,value)键值对的方式存在的。关键字(key)决定了对象在映射中的存储位置,检索对象时必须提供其key,才可以找到这个对象,关键字key应该是唯一的
关键字本身并不能决定对象的 存储位置,他需要通过一种 散列结束来处理,产生一个散列码的Int类型值
散列码通常作用一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。理想情况 下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。下边是本人在Idea中求得的散列码
public static void main(String[] args) {
HashMap map = new HashMap();//获得一个类本身的对象
List list = new ArrayList();
// list.add("2");
Map<Key, Value> m = new java.util.HashMap<>();
Set s = new HashSet<>();
//s.add("1");
int a = list.hashCode();
int b = s.hashCode();
int c= m.hashCode();
int d = map.hashCode();
System.out.println(a); //list不存值的时候哈希值为1
System.out.println(b);//set不存值的时候哈希值为0
System.out.println(c);//map不存值的时候哈希值为0
System.out.println(d);//HashMap不存值的时候哈希值为0
}
结果如下图
1.何为散列表?
散列表(也叫哈希表),是根据关键码值(key,value)而直接进行访问的数据结构。也就是说他通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
2.散列函数能使对一个数据序列的访问过程更加有效迅速,通过散列函数,数据元素将更快地被定位。
3.散列函数常用的六大方法
1)直接寻址法
2)数字分析法
3)平房取中法
4)折叠法
5)随机数法
6)除留余数法
(鉴于本人第一次了解到散列函数,暂且先列出其六大常用方法,有时间再去深挖。本次重点还是放在集合上)