集合总结
容器的体系

Collection
是单列集合的顶层接口,它表示一组对象,这些对象也称作collection的元素,jdk不提供迟磊接口的的任何直接实现,它提供更具体的子接口的(set和list)实现

Collection集合使用迭代器遍历
iterator
1.迭代器,集合的专用遍历方式
2.iteratoriterator();返回集合中元素的迭代器,通过集合的iterator()方法得到,所以说它依赖集合存在。
迭代器遍历集合时不能用集合的remove方法删除元素,但是可以用iterator的remove方法删除元素
Listiterator
1.通过结合的listiterator()方法得到,所以所他是list集合特有的迭代器
2.允许沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
3.listiterator 可以在遍历集合的过程中添加元素
List

特点:有序、可存储重复元素、元素存取有序
有序:
list中的每个元素都有索引标记。可以根据元素的索引标记(在list中的位置)访问元素,从而精确的控制这些元素。
可重复性:
list允许假如重复的元素。更确切的将。List通常允许满足e1.equals(e2)的元素重复加入容器。
List 接口常用的实现类有3个:ArrayList(底层是数组)、LinkedList(底层是双向链表)和Vector(底层也是数组,线程安全).
Arraylist
底层是用数组实现的存储。
特点:查询效率高,增删效率低,线程不安全。我们一般使用它。
LindedList
底层是用双向链表实现的存储。
特点:查询效率低,增删效率高,线程不安全。双向链表也叫做双链表,是链表的一种,它的每一个数据节点中都有两个指针。分别指向前一个节点和后一个节点。所以,从双向链表中的任意一个节点开始,都可以很方便的找打所有节点。
LinkedList特有的方法:
getFirst()返回列表中的第一个元素 getLast()返回列表中最后一个元素
addFirst(E e)在列表开头插入制定元素 addLast(E e)将指定的元素追加到此列表的末尾
E removeFirst() 从列表中删除并返回第一个元素 E removeLast()从列表中删除并返回最后一个元素

for(foreach)
概述:增强for的实质就是一个迭代器,可以使用增强for迭代单列集合或数组
语法格式:
for(集合元素数据类型或数组元素数据类型 变量名:集合名或数组名){
//在这里直接使用变量名就是集合或数组中的元素
}
注意事项:由于增强的for的实质就是迭代器,多以在增强for迭代集合的过程中不允许修改集合的长度
数据结构
栈
特点:先进先出
应用:java中的方法运行去就是栈结构
队列
特点:先进先出
应用:需要排队的地方,如:上学报名
数组
特点:内存中一片连续的空间
效率:查询数据快,增删数据慢
应用:java中的ArrayList集合就是数组结构的集合
数组的优势:是一个简单的线性虚列。可以快速的访问数组元素,效率高。如果从效率和类型的检查的角度来讲,数组是最好的
数组的劣势:不灵活。容量需要事先定义好,不能随着需求的变化而扩容。比如:我们在一个用户管理系统中,需要把今天注册的所有用户取出来,那么这样的用户有多少个?我们在写程序时是无法确定的。因此,在这里就不能使用数组
链表
特点:有指针和数据域组成
效率:查询速度慢,增删速度快
应用:存储经常改变的数据时可以使用
set集合
无序的、不可存储重复的元素、元素存取无序、没有索引只能通过迭代器或增强for循环遍历
特点:1.不包含与索引相关的方法;
2.可以保证存入的数据不重复,当重复的时候回自动覆盖;无索引;不重复自动覆盖;无索引;不重复
哈希值
哈希地址相同
①在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
②如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
③如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。
④实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
hashCode()返回对象的哈希码值
①同一个对象多次调用hashCode()方法返回的哈希值是相同的
②不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
Hashset集合
实现了set接口;内部封装了hashmap,固也是无序的;因为实现了set接口,存储的是key,vlaue永远都是PERSENT;非线程安全
①底层结构是哈希表
②对迭代顺序不做任何的保证,也就是说不保证存储和去除的元素顺序一致
③没有带索引的方法,所以不能使用普通for循环遍历
④不包含重复的元素
特点:去重复
依据:hashCode和equals
保证元素唯一性原理
1.根据对象的哈希值计算存储位置
如果当前位置没有元素则直接存入
如果当前位置有元素存在,则进入第二步
2.当前元素的元素和已经存在的元素比较哈希值
如果哈希值不同,则将当前元素进行存储
如果哈希值相同,则进入第三步
3.通过equals()方法比较两个元素的内容
如果内容不相同,则将当前元素进行存储
如果内容相同,则不存储当前元素
LinkedHashSet集合
①哈希表和链表实现了set接口具有可预测的迭代次序
②由链表保证元素有序,也就是说元素的存储和取出的顺序是一致的
③哈希表保证了元素唯一
特点:保证了添加元素的顺序与获取元素的顺序一致
依据:hashCode和equals
HashSet集合判断元素唯一性依赖hashCode和equals方法的共同作用,缺一不可!!!
TreeSet集合
①元素有序,可以按照一定的规则进行排序,具体排序方式取决于构造方法
②TreeSet():根据其元素的自然排序进行排序
③TreeSet(Comparator comparator) :根据指定的比较器进行排序
④没有带索引的方法,所以不能使用普通for循环遍历
⑤由于是Set集合,所以不包含重复元素的集合
特点:对元素排序(需要让元素的数据类型事项Comparable接口)
Comparable与Comparator的区别
Comparable只能在定义类的时候直接让类实现该接口,而Comparator可以在类已经写好后,由其他人编写比较规则;
直接创建Comparator接口的实现类对象;(可以用匿名内部类)
结论:直接创建Comparator接口的实现类对象,在compare方法中使用第一个参数减第二个参数是升序,反之降序;
让类实现Comparable接口
结论:自定义的类实现Comparable接口,重写compareTo方法,使用this减形参是升序,反之降序;
泛型
使用位置类名后,接口名后,方法返回值前,形参中
他可以帮助我们建立类型安全的集合,泛型的本质就是“数据类型的参数化”。我们可以吧“泛型”理解为数据类型的占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型
是一种特殊的变量,可以保存一个引用数据类型;
带有泛型方法 和多态的意义差不多
类型通配符
? 表示任意类型
? super A 表示允许A及A的父类类型
? extends A 表示允许A及A的子类类型
可变参数
1.就是数组但是比数组灵活
2.只能写在方法的形式参数位置,且必须在最后
格式
修饰符 返回值类型 方法名(数据类型… 变量名) { }
可变参数的使用
Arrays工具类中有一个静态方法:
1.public static <T> List<T> asList(T... a):返回由指定数组支持的固定大小的列表
2.返回的集合不能做增删操作,可以做修改操作
List接口中有一个静态方法:
1.public static <E> List<E> of(E... elements):返回包含任意数量元素的不可变列表
2.返回的集合不能做增删改操作
Set接口中有一个静态方法:
1.public static <E> Set<E> of(E... elements) :返回一个包含任意数量元素的不可变集合
2.在给元素的时候,不能给重复的元素
3.返回的集合不能做增删操作,没有修改的方法
Map集合
特点:
①键值对映射关系
②一个键对应一个值
③键不能重复,值可以重复
④元素存取无序
底层结构是 数组和链表
主要方法:

获取集合的方法

map集合的两种遍历方法
一、
①获取所有的键集合,用keySet()方法实现
②遍历集合,获取到每一个键,用增强for
③根据键去找值,用get(Object key)方法实现
二、
①获取所有键值对对象的集合:Set<Map.Entry<K,V>> entrySet() 注:Map.Entry<K,V>是一map的内部类对象类型
②遍历键值对对象的集合,得到每一个键值对对象
1.用增强for实现,得到每一个Map.Entry
2.根据键值对对象获取建和值: 用 getKey()和getValue()得到建和值
Collections集合工具类
注意: 用下面方法必须是list集合
public static void sort(List list) 将制定的列表按升序排序
public static void sort(List list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序。
public static void reverse(List<?> list) 反转制定列表中元素的顺序
public static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。

2949

被折叠的 条评论
为什么被折叠?



