java基础|总结一下集合

首先,为啥要有集合?集合和数组比起来有哪些好处?

数组的长度是固定的,而在我们开发中,一组数据的长度是不固定的,因此更方便的存储和操作数据,JDK的API中提供了集合,所有集合类都位于java.util包中,与数组不同的是,集合中不能存放基本类型数据,而只能存放对象的引用。

集合的特点:

1.可存放不同类型的对象(必须是对象)
数组只能存放同一类型数据,但是可以存放基本类型数据
2.集合的长度可以自动增加
数组的长度一旦确定,就不能再改变
3.集合对象中有众多方法可以直接调用进行元素(数据)操作
数组对象中没有方法可以对数据进行操作
4.java.util包中的辅助工具类Colletions,也能对集合中的元素进行操作
java.util包中的辅助工具类Arrays,是用来对数组中的元素进行操作的.

集合的分类

引入一个概念:Iterable接口,实现了该接口的对象,都可以使用foreach语句进行循环遍历.并且接口中提供了一个方法一个迭代器对象,迭代器对象在这里的作用就是循环遍历集合中的每一个元素;

public Iterator iterator();

以下两张图是我总结的集合的分类:主要就是List,Set和Map各自的实现类
在这里插入图片描述在这里插入图片描述

Collection接口

Collection接口继承了Iterable接口.因此它的实现类都可以或者子接口的实现类都可以使用foreach和迭代器遍历集合;具体说明会在下面实现类中讲到;

List接口和Set接口
List接口和Set接口都是Collection接口的子接口;他们有各自的实现类;
List集合主要有ArrayList、LinkedList、Vector等实现类;
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构
2.对于数据的随机访问,ArrayList效率优于LinkedList,因为LinkedList要移动指针
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
4.Vector是线程安全的集合,但是速度慢
5.查看API可知,List接口中是这些集合中共有的方法,而且每个集合类中又有一些自己独有的方法。
Set接口常见的实现类有:HashSet、LinkedHashSet
HashSet集合中元素的特点 :无序不可重复
LinkedHashSet集合中元素的特点:有序不可重复
SortedSet接口是Set接口的子接口,除了拥有Set集合的一些基本特点之外,还提供了排序的功能。
TreeSet类就是SortedSet接口的实现类;但是TreeSet集合中的排序默认是从小到大进行排序的,因此我们可以通过改变元素自身的比较性
1.自然排序(元素自身实现Comparable接口,重写其中的compareTo方法)
2.比较器排序(使用匿名内部类的形式实现Comparator接口)

具体排序功能下次会说OVO

List和Set集合的遍历:
1.使用集合中提供的迭代器

			List list = new ArrayList();
				//调用add方法存数据
				Iterator iterator = list.iterator();
				while(iterator.hasNext()){
					Object obj = iterator.next();
					System.out.println(obj);
			}

2.List集合的特有方式:get方法通过下标访问元素(仅适用于List集合)

			List list = new ArrayList();
				//调用add方法存数据
				for(int i=0;i<list.size();i++){
					System.out.println(list.get(i));
			}

3.foreach循环(增强for循环)

			List list = new ArrayList();
				//调用add方法存数据
				
				for(Object o:list ){
				System.out.println(o);
			}

Collection类型集合的工具类:Collections

java.util.Collections类是一个工具类,类中提供了很多的静态方法对Collection类型的集合进行操作;
fill():使用指定元素替换指定列表中的所有元素;
max(),根据元素的自然顺序,返回给定集合的最大元素;
sort(),根据元素的自然顺序,对指定列表按升序进行排序;
reverse(),反转集合中的元素;
注意!面试题常问到Collection和Collections的区别!

Map集合

Map类型的集合与Collection类型的集合不同,Map类型的集合存储数据的时候,要使用Key-Value的形式(键值对),且Key值不能重复,否则会覆盖原来的键值对;Map接口没有继承Iterable接口

Map接口的常见实现类:HaspMap,HashTable,Map子接口SortedMap的实现类:TreeMap
1.HashMap是线程不安全的,Hashtable是线程安全的
2.HashMap允许key值或者value值为null,但是Hashtable中的key值或者value值都不允许为null,否则报错.
3.TreeMap默认对key值进行自然排序或者比较器排序,用法和TreeMap是一样的,TreeMap中允许value值为null,但不允许key为null
注意:map中的key和value都必须是Object

Map集合的遍历
1.使用keySet方法,可以返回该Map集合中的所有key值的set类型集合

			Map map = new HashMap();
			//调用put方法存值

			for(Object key:map.keySet()){
				System.out.println(key+" : "+map.get(key));
			}

2.使用values方法,可以返回该Map集合中所有value值的Collection类型集合

			Map map = new HashMap();
			//调用put方法存值

			for(Object value:map.values()){
				System.out.println(value);
			}

3.使用entrySet方法,可以返回该Map集合中,包含所有Entry类型对象的Set集合

				Map map = new HashMap();
				//调用put方法存值
	
				Set entrySet = map.entrySet();
				for(Object obj:entrySet){
					//需要强转成Entry类型
					Entry entry = (Entry)obj;
					System.out.println(entry.getKey());
					System.out.println(entry.getValue());
				}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值