Java中 List, Map, Stack, Queue, Set 的介绍

Java 的集合框架是应该掌握好的,下面,从 List, Map, Stack, Queue, Set 这几个方面,来记录吧。

1. 数组与集合

数据(可以存储基础数据类型)是存储对象的一种容器,数组的长度是固定的,不适合在对象个数未知的情况下使用。

集合(只能存储对象,且对象类型不唯一)的长度是可变的,适用性更广。

2. 下图是集合框架中接口与类(常用)的结构图:



3. Iterable & Collection & Map

Collection类是集合类的根接口,Java 中没有提供这个接口的直接实现类,而是用两个接口扩展了这个接口:Set, Link. 这两个子接口,定义了更严格的集合规则。Set 中不能包含相同的元素(通常的集合);Link 是一个有序的集合,可以包含重复元素,提供了按索引访问的方式。

Map 是 java.util 包的另外一个接口,Map 包含了key-value 对,当然不能包含重复的key, 但可以有重复的value。

Iterable 接口,所有的集合类(除了Map接口那一支)都实现了的接口,它用来遍历集合中所有元素,它主要方法是:

Iterator<T> iterator();
    //返回一个迭代器Iterator,而Iterator也是一个接口所以有很大的自由,


而 iterator 也是一个接口,它的主要方法是:

public interface Iterator<E> {

    boolean hasNext();


    E next();


    default void remove() {
        throw new UnsupportedOperationException("remove");
    }


    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

4. 遍历

类集提供了以下四种常见的遍历方式:

(1) Iterator:迭代器,是使用最多的方式。

(2) ListIterator:是Iterator的子接口,专门用于List 的迭代输出。

(3) foreach:实现了 Iterable 接口的类,可以使用该语句。

(4) for循环。

示例:

    for语句 —— for(int i = 0; i < arr.size(); i++) { ... }

   foreach语句 —— for(int i : arr) { ... }

   Iterator 方式 —— 

     Iterator iterator = arr.interator();

     while(iterator.hasNext()) {Object o = iterator.next(); ...}


5. LinkedList & ArrayList

     LinkedList 和 ArrayList 由于地层实现不一样,前者是链表,后者是数组。因此,在使用时,LinkedList 使用在增删操作较多、查询操作较少的情况,ArrayList 则相反。


6. Map

   Map接口的实现类有:HashMap, TreeMap 等。

   HashMap 是最常用的 Map.  在遍历 HashMap 时,顺序是随机的。

  TreeMap 是有序的Map.


7. 对Array, ArrayList 的排序

   Array 即数组,ArrayList 即长度可变数组。数组的排序,使用 java.util.Arrays.sort();ArrayList 排序使用 java.util.Collectons.sort() 。

  代码示例如下

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;

public class createNewPackage {

	public static void main(String[] args){
		//基本类型数据
		int[] aaa = {5,3,4,1,2};
		Arrays.sort(aaa);
		for(int i :aaa)	System.out.println(i);
		//对象类型数据,请实现对象的Comparable接口,最好也重写一下toString()方法
		people[] threepeople = new people[3];
		threepeople[0] = new people(20,"Alice");
		threepeople[1] = new people(10,"Bob");
		threepeople[2] = new people(15,"Jack");
		Arrays.sort(threepeople);
		for(people m : threepeople)	System.out.println(m);
		
		//ArrayList
		ArrayList al = new ArrayList();
		al.add(new people(30,"Yin"));
		al.add(new people(10,"Yu"));
		al.add(new people(20,"Hu"));
		Collections.sort(al);
		// 不能使用for each 了,因此使用迭代器
		Iterator iterator = al.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
	}
}

8. 对List 去重

   待补充...


9. 实现最近最少使用 cache

   待补充... 使用 LinkedHashMap

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值