【Java】Java基础知识点之集合类型基础概念

时间:2022-11-11 10:59:29

Java常用集合有哪些?

Java集合类主要由两个接口Collection和Map派生出来的。 Collection有三个子接口:List、Set、Queue

List代表了有序可重复集合,可直接根据元素的索引来访问; Set代表无序不可重复集合,只能根据元素本身来访问; Queue是队列集合。

Map代表的是存储key-value对的集合,可根据元素的key来访问value。 集合体系中常用的实现类有ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等实现类。 List 、Set和Map 的区别List以索引来存取元素,有序的,元素是允许重复的,可以插入多个null;

Set 不能存放重复元素,无序的,只允许一个null; Map 保存键值对映射; List 底层实现有数组、链表两种方式; Set、Map 容器有基于哈希存储和红黑树两种方式实现; Set 基于 Map 实现,Set 里的元素值就是 Map的键值。

ArrayList 的扩容机制?

ArrayList扩容的本质就是计算出新的扩容数组的size后实例化,并将原有数组内容复制到新数组中去。 默认情况下,新的容量会是原容量的1.5倍。

Arraylist 与 LinkedList的区别?

ArrayList基于动态数组实现;LinkedList基于链表实现。对于随机index访问的get和set方法,ArrayList的速度要优于LinkedList。因为ArrayList直接通过数组下标直接找到元素;LinkedList要移动指针遍历每个元素直到找到为止。新增和删除元素,LinkedList的速度要优于ArrayList。因为ArrayList在新增和删除元素时,可能扩容和复制数组;LinkedList实例化对象需要时间外,只需要修改指针即可。

多线程场景下如何使用 ArrayList?

ArrayList 不是线程安全的,如果遇到多线程场景,可以通过 Collections 的 synchronizedList 方法将其转换成线程安全的容器后再使用 代码实例

	List<String> synchronizedList = Collections.synchronizedList(list);
	synchronizedList.add("aaa");
	synchronizedList.add("bbb");
	for (int i = 0; i < synchronizedList.size(); i++) {
		System.out.println(synchronizedList.get(i));
	}