一.Collection&List知识:
所谓集合:
Java语言的java.util包中提供了一些集合类,这些集合类又称之为容器,之前我们学过存储数据的是数组,但是数组访问方式比较单一,插入/删除等操作比较繁琐,这个时候,java里面就有集合这种增删比较方便的类提供我们使用。
集合做什么
1:将对象添加到集合
2:从集合中删除对象
3: 从集合中查找一个对象
4:从集合中修改一个对象就是增删改查
Collection集合概述
-
是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
-
JDK 不提供此接口的任何直接实现,它提供更具体的子接口
- collection集合的常用方法【应用】
方法名 说明 boolean add(E e) 添加元素 boolean remove(Object o) 从集合中移除指定的元素 void clear() 清空集合中的元素 boolean contains(Object o) 判断集合中是否存在指定的元素 boolean isEmpty() 判断集合是否为空 int size() 集合的长度,也就是集合中元素的个数 - 迭代器:
-
1.概述:
帮助我们做集合遍历的工具。
2.作用:
java中提供了很多种集合,它们在存储元素时,采用的存储方式不同。所以当我们要取出这些集合中的元素时,可以通过一种通用的获取方式来完成。Collection集合元素的通用获取方式: 在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来;继续再判断,如果还有就再取出来。一直到把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
集合中把这种取元素的方式描述在Iterator接口中。
-
Collection是集合接口
---Set子接口:无序,不允许存在重复的元素
---List子接口:有序,可以存在重复元素
区别,Collection是集合类
Set 和List的对比:
Set:检查元素效率低下,删除和插入的效率高,插入和删除不会引起元素的位置变化。
List:和数组类似,List可以动态增长,查找元素的效率较高,插入元素和删除元素效率低,因为会引起其他元素位置发生变化。
Set 和 List的具体子类:
— List 有序,可重复
ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
—Set 无序,唯一HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一TreeSet
底层数据结构是红黑树。(唯一,有序)
1. 如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定 -
hashCode():
-
hashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列码,可以提高检索的效率,主要用于在散列存储结构中快速确定对象的存储地址,如Hashtable、hashMap中。
-
泛型的英文是 generics,generic 的意思是通用,而翻译成中文,泛应该意为广泛,型是类型。所以泛型就是能广泛适用的类型。
但泛型还有一种较为准确的说法就是为了参数化类型,或者说可以将类型当作参数传递给一个类或者是方法。
泛型按照使用情况可以分为 3 种。
- 泛型类。
- 泛型方法。
- 泛型接口。
为什么需要泛型?
Java语言引入泛型的好处是安全简单。可以将运行时错误提前到编译时错误。
Java Map 接口Map 接口中键和值一一映射. 可以通过键来获取值。
- 给定一个键和一个值,你可以将该值存储在一个 Map 对象。之后,你可以通过键来访问对应的值。
- 当访问的值不存在的时候,方法就会抛出一个 NoSuchElementException 异常。
- 当对象的类型和 Map 里元素类型不兼容的时候,就会抛出一个 ClassCastException 异常。
- 当在不允许使用 Null 对象的 Map 中使用 Null 对象,会抛出一个 NullPointerException 异常。
- 当尝试修改一个只读的 Map 时,会抛出一个 UnsupportedOperationException 异常



