Java集合

Java集合

1.集合是什么?

	集合是接口。是用来存放对象引用的一个容器。

集合有三大接口:
1.Set接口及其子类,Set提供的是一个无序的集合;
2.List接口及其子类,List提供的是一个有序的集合;
3.Map接口及其子类,Map提供的是一个映射关系的集合数据结构;
注:List和Set继承Collection,Map不是。

2.Collection

(1).Collection是接口不能实例化,只能用多态才创建对象
 //Collection<E> con=new Collection<E>();是接口不能实例化
		
   Collection con=new ArrayList();//多态,父类对象的引用指向子类对象
(2).collection方法

        Collection con=new ArrayList();//多态,父类对象的引用指向子类对象
		con.add("张三");//添加方法
	//	con.clear();//清空方法
		con.contains("张三");//判断集合里是否包含指定元素
		System.out.println(con.contains("张三"));
		con.isEmpty();//是否为空
		System.out.println(con.isEmpty());
		con.remove("张三");//删除元素
		con.size();//返回集合元素个数
		
		// Object[] toArray()  将集合转换成一个object类型的数组
		Object[] o=con.toArray();
		for (int i = 0; i < o.length; i++) {
			System.out.println(o[i]);
		}

(3).迭代器

Collection集合元素的通用获取方式:在取元素时,先判定是否有元素,如果有把这个元素取出来,在继续判断,如果还有,那就继续取出来,直到取完为止,这种方式叫作迭代。


        Iterator it=con.iterator();
		it.next();//返回迭代下一个元素,并将指针向后移动一位
		it.hasNext();//判断集合中是否有元素可以迭代
		it.remove();//移除迭代器返回的最后一个元素(可选操作)

注:迭代器是创建集合的副本,不可使用增加删除方法,不然会导致并发修改异常产生。

3.常见数据结构特点

1.数组,采用该结构的集合,对元素查找速度快,通过索引,可以快速访问指定位置的元素,增删元素慢,每次修改元素都要创建新数组
2.链表,采用该结构的集合,对元素的查找速度慢,增删快,节点之间通过地址进行连接。
3.堆栈,采用该结构的集合,对元素的存取,采用先进后出(弹夹形式)
4.队列,采用该结构的集合,对元素的存取,采用先进先出(管道形式)

4.List集合

list子体系特点:有序的,有整数索引,允许重复
list子体系特有功能:
			void add(int index, E element) :将元素添加到index索
			引位置上
		    E get(int index) :根据index索引获取元素
		    E remove(int index) :根据index索引删除元素
	  	    E set(int index, E element):将index索引位置的的元素设置为element

(一)ArrayList

// 创建集合
		ArrayList arr=new ArrayList();
		arr.add("hello");//新增方法
		arr.add(1, "world");//将指定元素插入指定位置
		arr.clear();//清除该列表中所有元素
		arr.contains("hello");//如果此列表中包含指定元素,则返回true
		arr.get(0);//返回此列表中指定位置上的元素
		arr.isEmpty();//判断是否为空
		arr.indexOf("hello");//返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
		arr.lastIndexOf("hello");//返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。
		arr.remove(1);//移除此列表中指定位置上的元素。
		arr.set(1, "java");//用指定的元素替代此列表中指定位置上的元素。
		arr.size();//返回列表中元素个数
		arr.toArray();//转数组

(二)LinkedList特有功能

LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢
void addFirst(E e) :向链表的头部添加元素
void addLast(E e):向链表的尾部添加元素
E getFirst():获取链头的元素,不删除元素
E getLast():获取链尾的元素,不删除元素
E removeFirst():返回链头的元素并删除链头的元素
E removeLast():返回链尾的元素并删除链尾的元素

5.Set集合

Set集合没有特定的方法,全部方法来自于Collection接口
如果要迭代Set下的集合,只能使用Iterator迭代
(1).保证对象唯一:依赖当前这个对象的hashCode和equals方法。

原理:先调用当前这个对象的hashCode方法,计算出哈希值,如果2个对象的哈希值相同,这时还会调用对象的equals方法判断2个对象是否相同,如果equals返回的true,就认为2个对象相同。不保存第二个对象。如果equals返回的false,第二个对象依然保持

(2).HashSet保存自定义对象
// 创建集合
		HashSet set=new HashSet();
		//添加自定义对象
		User u=new User();
		set.add(u);
		set.add(new User());
		//遍历
		for (Iterator iterator = set.iterator(); iterator.hasNext();) {
			System.out.println(iterator.next());
			
		}

注:给HashSet中保存对象时一定要复写Object 类中的hashCode和equals方法

(3).LinkedHashSet

LinkedHashSet底层使用的是链表+哈希表结构。它可以保证存放的元素唯一的同时,还可以保证对象的存取顺序

//创建对象
		LinkedHashSet set = new LinkedHashSet();
		
		set.add("aaa");
		set.add("nba");
		set.add("abc");
		set.add("cba");
		set.add("cba");

		for (Iterator it = set.iterator(); it.hasNext();) {
			System.out.println(it.next());
		}

6.Map集合

Map集合,它在保存数据的时候可以一次保存一组(一对)数据。保存的是2个对象,两个对象之间有个对应关系。

在这里插入图片描述

//创建集合
		Map m=new HashMap<>();
		//保存元素
		m.put("刘诗诗", "吴奇隆");
		Object value=m.put("ghjh", "ghj");
		m.put("ds", "dsdas");
		System.out.println(m);

		//继续保存数据
		Object v=m.put("ghjh", "dsaf");
		
		System.out.println(m);
		System.out.println(value);
		System.out.println(v);
//删除功能
		Map m=new HashMap<>();
		m.put("aaa","AAAA");
		m.put("bbb","BBBB");
		m.put("ccc","CCC");
		m.put("ddd","DDDD");
		//通过指定的key 删除数据
		Object v=m.remove("aaa");
		System.out.println(v);
		System.out.println(m);
		//清除所有元素
		m.clear();
		System.out.println(m);
//查询功能
		Map m=new HashMap<>();
		m.put("aaa","AAAA");
		m.put("bbb","BBBB");
		m.put("ccc","CCC");
		m.put("ddd","DDDD");
		
		Object v=m.get("aaa");
		System.out.println(v);
		System.out.println(m.size());

判断方法:
boolean isEmpty() 如果此映射未包含键-值映射关系,则返回 true。
boolean containsKey(Object key) 如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。

7.Map和Set集合的关系

1.都有几个类型的集合。HashMap 和 HashSet ,都采 哈希表算法;TreeMap 和 TreeSet 都采用 红-黑树算法;LinkedHashMap 和 LinkedHashSet 都采用 哈希表算法和红-黑树算法。
2.分析 Set 的底层源码,我们可以看到,Set 集合 就是 由 Map 集合的 Key 组成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值