JAVA集合(List、Set、Map)

集合框架的基本结构图

在这里插入图片描述

1、ArrayList集合

①ArrayList的创建增删改查

package cn.cduestc.list.arrayList;

import java.util.ArrayList;
import java.util.List;

public class ArrayListTest {

	public static void main(String[] args) {
		//创建一个ArryList集合,ArrayList集合底层是object数组
		List list = new ArrayList();
		//添加数据
		list.add("张虎");
		list.add(true);
		list.add(32);
		list.add(53L);
		list.add(0.12F);
		
		//删除数据
		//根据数据删除(如果要删除某个整数,那么需要使用Integer类型,如果是int类型会默认是按照下标进行删除)
		list.remove(new Integer(32));
		//根据下标删除
		list.remove(3);
		
		//修改数据
		list.set(0, "虎子哥哥");
		
		//查询单个
		System.out.println(list.get(2));
		//ArrayList集合使用size()方法输出集合的长度时,不是集合的能存储值长度,而是集合现在已经存储值的长度。
		System.out.println(list.size());
		
		System.out.println("============================");
		//遍历查询
		//方案一:普通for循环
		for(int i=0;i<list.size();i++) {
			System.out.println(list.get(i));
		}
		System.out.println("============================");
		//方案二:高级for循环
		for(Object temp : list) {
			System.out.println(temp);
		}
		System.out.println("============================");
		//方案三:lambda表达式(jdk1.8的新特性)
		list.forEach(temp->System.out.println(temp));
	}
}

2、LinkedList和ArrayList增删改查操作方法一样

List的特点?
答:
List是有序可重复的,且有索引,可以根据索引对List集合进行操作。
LinkedList和ArrayList的区别?
答:
1、数据结构不同:LinkedList使用的链表数据结构,ArrayList是使用的数组的数据结构
2、效率不同:LinkedList使用的是链表,所以增删操作时效率较高,而ArrayList使用的数组,则查询和修改效率更高。

3、HashSet集合

①HashSet进行增删改查

package cn.cduestc.set;

import java.util.HashSet;
import java.util.Set;

public class HashSetTest {

	public static void main(String[] args) {
		
		//创建一个HashSet集合
		Set set = new HashSet();
		
		//添加数据
		set.add("张三");
		set.add("李四");
		set.add("李四");
		set.add("王五");
		set.add("赵六");
		
		//删除数据(删除数据只能根据数据删除,不能根据下标)
		set.remove("王五");
		
		//修改:删除+添加
		set.remove("李四");
		set.add("炮灰甲");
		
		//遍历(我们发现set集合会对数据进行自动去重)
		set.forEach(temp->System.out.println(temp));
		
		//打印集合长度(和List集合一样,只计算存储了值的长度)
		System.out.println(set.size());
	}
}

②HashSet的特点?

答:
1、HashSet底层是哈希表(HashTable),数据结构是数组+链表的形式,HashSet源码中使用HashMap中的key进行存储的,所以,是不允许重复的。
2、数据存储是无序的:其实HashSet存储数据是有序的,但是不是按照我们存值的顺序,是按照数据的Hash值进行存储的。
3、HashSet的自增功能:创建一个HashSet集合的初始容量是16,如果数据量达到了阈值(容量乘以加载因子),那么会自增为现在容量的两倍。加载因子也可以在创建集合的时候自定义。

③HashSet保证数据唯一性的操作方法?

答:
前提是HashSet必须实现了Object的hashCode() 和equals()方法。首先存值的时候HashSet会将新添加的数据使用哈希算法生成一个哈希值,然后根据这个哈希值去判断集合中存不存在该值,如果不存在,那么直接添加;如果存在,再使用equals()判断这个哈希值对应的数据和新添加的数据是否一致,如果不一致,那么直接添加(出现hash值一致,数据不一致的情况,是将新添加的数据指向原来的数据,即是使用链表结构);如果一致就不要添加了。

4、TreeSet集合:对数据的增删改查和HashSet基本一致

①TreeSet的特点?

答:TreeSet底层是基于二叉树的,不可以重复,但是是有序的(仅对实现comparable、comparator接口的类型有效)

②TreeSet和HashSet的区别?

答:
1、实现方式:HashSet是数组+链表实现的(依赖HashMap),TreeSet是二叉树实现的(依赖TreeMap)
2、数据是否有序:HashSet数据时无序的(其实是按照Hash值进行排序了);TreeSet是有序的(前提是实现了Comparable、Comparator接口),且不是按照存储顺序进行排序,是对数据进行自动排序(如:存储的全是Integer类型的值,那么它会按照大小来进行排序)
3、是否能放入null:HashSet是可以放入null值的,但是只能放入一个;TreeSet是不能放入null值的。

5、HashMap集合增删改查

package cn.cduestc.map;

import java.util.HashMap;
import java.util.Map;

public class HashMapTest {
	public static void main(String[] args) {
		Map<String,String> map = new HashMap<>();
		
		//添加
		map.put("1", "枫");
		map.put("2","最长的电影");
		map.put("3", "搁浅");
		map.put("4", "晴天");
		map.put("5","说好不哭");
		map.put("6","听妈妈的话");
		
		//删除
		map.remove("5");
		
		//修改
		map.put("6","告白气球");
		
		//遍历
		map.forEach((k,v)->System.out.println(k+"==="+v));
		//HashMap覆写了toString方法,所以可以直接打印
		System.out.println(map);
	}
}

①HashMap的特点?

答:
1、HashMap是双列型,存放数据时key-value的形式。HashMap底层是数组+链表的形式。key不可以重复,value可以重复。key是无序的(其实key是有序的,是按照key的哈希值进行排序的)。
2、HashMap是可以序列化的(实现了Serializable接口),非synchronized,线程不安全。
3、创建HashMap集合,初始容量也为16,加载因子为0.75,且可以自定义加载因子。

6、TreeMap和HashMap的增删改查操作方法基本一致

①TreeMap的特点?

答:TreeMap底层是二叉树,key不可以重复,value可以重复;key是有序的(前提是key的类型实现了Comparable、Comparator接口)。

7、常用集合的分类

Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
│—————-└ Vector 接口实现类 数组, 同步, 线程安全
│ ———————-└ Stack 是Vector类的实现类
└——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表存储元素,线程不安全
│————————└ LinkedHashSet 链表维护元素的插入次序,线程不安全
└ —————-TreeSet 底层实现为二叉树,元素排好序,线程不安全

Map 接口 键值对的集合 (双列集合)
├———Hashtable 接口实现类, 同步, 线程安全
├———HashMap 接口实现类 ,没有同步, 线程不安全-
│—————–├ LinkedHashMap 双向链表和哈希表实现
│—————–└ WeakHashMap
├ ——–TreeMap 红黑树对所有的key进行排序
└———IdentifyHashMap

发布了5 篇原创文章 · 获赞 1 · 访问量 61
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览