Day17:集合框架

认识集合

Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
在这里插入图片描述
JAVA集合类主要由Map接口和Collection接口派生而来。
JAVA集合类由3大类接口构成(Map接口、List接口和Set接口)。
虚线框表示接口或抽象类,实线框表示开发中常用的实现类。

Ubilities:实用类集。

Arrays提供对数组类进行排序、遍历等多种算法实现。
Collection:无序、可重复的一组数据。有两个常用子接口,List和Set。 提供了对集合进行排序、遍历等多种算法实现。

List:有序、可重复
实现类:ArrayList:底层是可变数组(线性表),遍历元素更快,随机访问快,改变值也快
LinkedList:底层是双向链表,插入、删除快

Set:无序、不可重复
HashSet:底层是HashMap的键,使用键的hash值来保证唯一性

Map:实现一一对应(Entry),常用HashMap
在这里插入图片描述

List接口

ArrayList

在这里插入图片描述

ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高在这里插入图片描述

LinkeList

在这里插入图片描述

LinkedList采用链表存储方式,插入、删除元素时效率比较高
在这里插入图片描述
List的增删查改

Linkedlist list=new Likedlist();
New news1=new News(1,三国演义,罗贯中);
list.add(news1);//增
list.remove(news1);//删
list.get(0);//根据下标查找元素
list.set(0,1);//根据下标修改元素

List的遍历

//迭代器遍历
Iterator itr=list.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
//for循环遍历
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
//增强for遍历
for(Obiect o:list){
System.out.println(o);

Set接口

Set接口存储一组唯一,无序的对象
HashSet是Set接口常用的实现类
Set中存放对象的引用

Set set=new HashSet();
String s1=new String("java");
String s2=s1;
String s3=new String("JAVA");
set.add(s1);//增
set.add(s2);
set.add(s3);
System.out.println(set.size());

Set接口如何判断加入对象是否已经存在呢?
采用对象的equals()方法比较两个对象是否相等

Set set=new HashSet();
String s1=new String("java");
String s2=s1;
String s3=new String ("java");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size());

HashSet是Set接口常用的实现类

Set newsTitleSet = new HashSet();
NewTitle car = new NewTitle(1, "汽车", "管理员");
//增加元素
newsTitleSet.add(car);
//获取元素个数
System.out.println("新闻标题数目为:" + newsTitleList.size() + "条");

Set接口不存在get()方法

Iterator接口

如何遍历Set集合呢?

方法1:通过迭代器Iterator实现遍历

Iterator itr=set.iterator();
while(itr.hasNext()){
	System.out.println(itr.next());
}

获取Iterator :Collection 接口的iterator()方法
Iterator的方法
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素

方法2:增强型for循环

for(Object o :set){
System.out.println(o);
}

Map接口

Map接口存储一组成对的键(key)——值(value)对象,提供key到value的映射,通过key来检索。Map接口中的key不要求有序,不允许重复。value同样不要求有序,但允许重复。
在这里插入图片描述
Map接口中存储的数据都是键一值对, 例如,一个身份证号码对应一个人,其中身份证号码就是key,与此号码对应的人就是value。
键值对(Map.Entry<,>)
键对应set的存储结构
值对应Collection的存储结构
数据结构:在长度小于8时,是由Node构成的数组
超过8时,转成红黑树存储
当map的长的由原来大于8变为小于6时,转回到数组
树:每次遍历时,根据当前节点和查找数据的大小,数据量减半
红黑树:每插入一次数据,如果破坏树的平衡,通过旋转恢复
遍历Map
方法1:通过迭代器Iterator实现遍历
方法2:增强型for循环
方法3:键值对

Collections类

Collections类是java提供的一个集合操作工具类,它包含了大量的静态方法,用于实现对集合元素的排序、查找和替换等操作。
方法主要有:
sort():排序
binarySearch():查找
max()\min():查找最大\最小值

其他常用实现类

List接口:Vector:线程安全的List集合
ConcurrentLinkedList:线程安全的链式表
Set接口:LinkedHashSet:有顺序的HashSet
Map接口:ConcurrentHashMap:线程安全的HashMap,序列化
对所有数据分段上锁
不在多线程的情况下使用集合。
HashTable的特点:
所有数据都上锁,如果一个线程访问了某段数据,
其他人都不能访问所有数据

猜你喜欢

转载自blog.csdn.net/sanjiang521/article/details/107659458