Java——集合浅析

  • Map<K, V>: Java中存储键值对的数据类型都实现了这个接口,表示“映射表”。支持的两个核心操作是get(Object key)以及put(K key, V value),分别用来获取键对应的值以及向映射表中插入键值对。
    在这里插入图片描述
    Map中还包括一个内部类Entry,该类封装了一个key-value对。Entry包含如下三个方法:
    在这里插入图片描述

  • Set: 实现了这个接口的集合类型中不允许存在重复的元素,代表数学意义上的“集合”。它所支持的核心操作有add(E e),remove(Object o), contains(Object o),分别用于添加元素,删除元素以及判断给定元素是否存在于集中。

  • List: Java中集合框架中的列表类型都实现了这个接口,表示一种有序序列。支持get(int index), add(E e)等操作。
    在这里插入图片描述

  • Queue: Java集合框架中的队列接口,代表了“先进先出”队列。支持add(E element), remove()等操作。
    在这里插入图片描述

  • Stack: Java集合框架中表示堆栈的数据类型,堆栈是一种“后进先出”的数据结构。支持push(E item), pop()等操作。

Java集合类的整体框架如下:
(取自菜鸟编程)
在这里插入图片描述

从上图中可以看出,集合类主要分为两大类:CollectionMap

Collection是List、Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主要又分为两大部分:List和Set。

  • List接口通常表示一个列表(数组、队列、链表、栈等),其中的元素可以重复,常用实现类为ArrayList和LinkedList,另外还有不常用的Vector。另外,LinkedList还是实现了Queue接口,因此也可以作为队列使用。
  • Set接口通常表示一个集合,其中的元素不允许重复(通过hashcode和equals函数保证),常用实现类有HashSet和TreeSet,
    • HashSet是通过Map中的HashMap实现的
    • TreeSet是通过Map中的TreeMap实现的。TreeSet还实现了SortedSet接口,因此是有序的集合(集合中的元素要实现Comparable接口,并覆写Compartor函数才行)。

我们看到,抽象类AbstractCollection、AbstractList和AbstractSet分别实现了Collection、List和Set接口,这就是在Java集合框架中用的很多的适配器设计模式,用这些抽象类去实现接口,在抽象类中实现接口中的若干或全部方法,这样下面的一些类只需直接继承该抽象类,并实现自己需要的方法即可,而不用实现接口中的全部抽象方法。

Map
Map是一个映射接口,其中的每个元素都是一个key-value键值对,同样抽象类AbstractMap通过适配器模式实现了Map接口中的大部分函数,TreeMap、HashMap、WeakHashMap等实现类都通过继承AbstractMap来实现,另外,不常用的HashTable直接实现了Map接口,它和Vector都是JDK1.0就引入的集合类。

Iterator
Iterator接口经常被称作迭代器,它是Collection接口的父接口。但Iterator主要用于遍历集合中的元素。 Iterator接口中主要定义了2个方法:

  • hasNext():如果仍有元素,返回true
  • next():返回迭代的下一个元素
public class IteratorExample {
	public static void main(String[] args){
	//创建集合,添加元素
		Collection<Day> days = new ArrayList<Day>();
		for(int i =0;i<10;i++){
			Day day = new Day(i,i*60,i*3600);
			days.add(day);
		}
		//获取days集合的迭代器,集合元素的值传给了迭代变量,仅仅传递了对象引用。保存的仅仅是指向对象内存空间的地址
		Iterator<Day> iterator = days.iterator();
		while(iterator.hasNext()){//判断是否有下一个元素
			Day next = iterator.next();//取出该元素
			//逐个遍历,取得元素后进行后续操作
			.....
		}
	}
}

ArraysCollections是用来操作数组、集合的两个工具类,例如在ArrayList和Vector中大量调用了Arrays.Copyof()方法,而Collections中有很多静态方法可以返回各集合类的synchronized版本,即线程安全的版本,当然了,如果要用线程安全的结合类,首选Concurrent并发包下的对应的集合类。

Collections比较常用的方法:
在这里插入图片描述

  • 为List集合进行排序:Collections.sort()
  • 返回集合(List和Set)中的最大最小值:Collections.max和 Collections.min-
  • 对List结合进行二分查找:Collections.binarySearch,在调用此方法前,需要先进行升序排列Collections.sort()。查询到返回位置否则返回-(index)-1.
  • reverse(反转List的顺序),reverseOrder(强行反转比较器的顺序)返回的是一个比较器。
  • 将集合类变成线程安全的(synchronizedCollection(Collection c)、synchronizedList(List list)、synchronizedMap(Map<K,V> m)、synchronizedSet(Set s))

Arrays常用的方法:

  • Arrays.binarySearch:二分查找
  • Arrays.copyOf:复制
  • Arrays.copyOfRange:复制部分
  • Arrays.sort:排序
  • Arrays.fill:填充
  • Arrays.toString:字符串返回
  • Arrays.hashCode:哈希值
  • Arrays.asList:将数组转为List
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yawn__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值