第十四天的日常更新--容器

今天分享一些容器的小知识吧
说道容器就要在说一下数组
数组:储存多个数据
特点:1.定长
2.数据类型相同
3.有序

容器类:存储多个数组
collection:容器的父接口
set:子接口 无序的不可重复的
List:子接口:有序的可重复的
在这里插入图片描述

collection

有两种遍历方式
1.增强For循环|For …each
2.迭代器:
1.获取迭代某一个容器的迭代器对象
2.判断是否存在下一个可迭代的元素 hasNext() ->true,false
3.返回下一个元素 next() ->下一个元素

Iterator<String> it=coll.iterator();
while(it.hasNext()){
System.out.println(it.next());

List

:接口的特点:有序可重复的.
新增加了一些根据索引操作的方法

List有四种遍历方式
1.普通for
2.增强for
3.迭代器 :iterator
4. ListIterator listIterator() 返回此列表元素的列表迭代器(按适当顺序)。

ArraysList

最重要的容器类之一:
它是List的接口实现类:有序的可重复的
ArraysList:
底层:数组(可变数组)数组在内存中是连续的内存空间
优点:查询,随机访问效率高
缺点:增加删除效率低(改变容量涉及到数组的拷贝)
动态扩容:通过调用Arrays.copyof()方法进行动态扩容,扩容后新容器的大小是原容器的1.5倍.
第一次添加数据初始容量为10,加载因子(0~1):1.
新增方法使用List定义的方法
是线程不安全的容器类

vector 向量
底层的实现与特点与ArraysList相似.
1.vector是线程安全的容器类|同步的效率较低
2.扩容原容量的两倍.

LinkedList

底层:双向链实现
优点:增删效率高
缺点:查询.随机访问效率低
新增方法:新增加了一些操作与链表头与链表尾的功能(见名知意的方法使用)
在这里插入图片描述

set

无序的不可复制的,null值也只能存在一个
没有新增的方法与collection中的功能相同
遍历
1.增强For
2.迭代器

HashSet

底层是由HashMap维护的.
底层:由哈希表结构存在,(数组+链表+红黑树)
优点:查询,增加,删除效率较高
缺点:无序
扩容:默认初始容量为16,加载因子0.75,扩容后是原容量的2倍.

HashSet存储引用数据类型去重: 需要重写hashCode()方法和equals()方法进行自定义去重.
如果不重写hashCode()方法,可以遇到没有equals()方法这一步就已过滤掉不是相同的对象了,直接存储,不会进行equals比较.
hashCode()相同的对象有可能相同可以不相同,进一步比较equals()
hashCode()不相同的对象肯定不相同,过滤掉一些不相同的对象,不需要进一步比较equals方法效率较高

TreeSet

底层是由TreeMap维护的
底层:红黑树结构实现的.
优点:默认升序排序(默认自然排序|指定排序)
缺点:没有HashSet效率高

存储引用数据类型的时候(引用数据类型对象的排序,引用数据类型的去重):
引用数据类型
1)实现内部比较器
2)自定义外部比较器
Comparable接口->内部比较器|自然排序,重写compareTo()方法,方法中自定义比较规则
Comparator接口->外部比较器|自定义比较器|自定义排序:重写compare()方法,方法中自定义比较规则

外部比较器ComparatorDemo 只能用来比较Person对象,按照姓名的自然排序比较

Map:

存储键值对 Key-value(K-V)

key是无序的,不可重复的----->与set相似

value是无序的,可重复的------>与collection相似

一个key只能对应一个value(如果想要value对应多个值可以储存在容器中List)

存储多个数据的时候,如果key相同,value会覆盖.

HashMap

线程不安全

底层是由哈希表实现的

hashmap去重–>根据key去重,自定义引用数据类型数据:hashcode()和equals().

Hashtable和HashMap类似–>线程安全的

TreeMap

底层是由红黑树实现的

TreeMap去重–>根据key去重,自定义引用数据类型数据,内部|外部比较器

选择:如果想要根据Key做某种规则的排序选择TreeMap,否则选择haspMap.

Collections 操作于容器的工具类
void sort(List) //对 List 容器内的元素排序,按照升序进行排序。
void shuffle(List) //对 List 容器内的元素进行随机排列
void reverse(List) //对 List 容器内的元素进行逆续排列
void fill(List, Object) //用一个特定的对象重写整个 List 容器
int binarySearch(List, Object)//采用折半查找的方法查找特定对象

Collections 操作于容器的工具类

void sort(List) //对 List 容器内的元素排序,按照升序进行排序。
void shuffle(List) //对 List 容器内的元素进行随机排列
void reverse(List) //对 List 容器内的元素进行逆续排列
void fill(List, Object) //用一个特定的对象重写整个 List 容器
int binarySearch(List, Object)//采用折半查找的方法查找特定对象

如何处理HashMap的线程安全问题:
1.Hashtable
2.Collections.synchronizedMap(Map) 返回一个线程安全的map容器
3.juc包下java.util.concurrent 类 ConcurrentHashMap<K,V> 线程安全的容器HashMap容器类==>推荐使用:效率高

Properties:K-V都是字符串形式的数据
用作配置文件使用:
src右键->new source folder->new file–>db.properties–>键值对形式的数据

猜你喜欢

转载自blog.csdn.net/weixin_45116848/article/details/91889047