List、Set、Map

java集合

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map)
Collection接口是 (java.util.Collection)是Java集合类的顶级接口之一,Collection 接口有 3 种子类型集合: List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、TreeSet、LinkedHashSet、Stack、Priorityqueue等.
常用Iterator来遍历。

 List、Set、Map是这个集合体系中最主要的三个接口。
      其中List和Set继承自Collection接口。
      Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。
      List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
      Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。
  • ArrayList: 具体用法参照https://www.runoob.com/java/java-arraylist.html
add     ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google"); 
set   	sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
get 	sites.get(1) //访问第二个元素
remove  sites.remove(2);  sites.remove("Wiki");
包含     sites.contains("Taobao")
大小 	sites.size()
排序 	Collections.sort(sites);  // 此时字母排序
  • LinkedList:https://www.runoob.com/java/java-linkedlist.html

List有序且允许元素重复

  • 对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList
  • ArrayList、HashSet/LinkedHashSet、PriorityQueue、LinkedList是线程不安全的,可以使用synchronized关键字,或者类似下面的方法解决:
    List list = Collections.synchronizedList(new ArrayList(…));

ArrayList是⼀个数组队列,相当于动态数组。它由数组实现,随机访问效率⾼,随机插⼊、随机删除效率低。
LinkedList是⼀个双向链表。它也可以被当作堆栈、队列或双端队列进⾏操作。LinkedList随机访问效率低,但随机插⼊、随机删除效率⾼。

树层序遍历用到Queue
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
queue.poll()
Queue用法
boolean add(E e);
将对象e插入队列尾部,成功返回true,失败(没有空间)抛出异常IllegalStateException;
boolean offer(E e);
将对象e插入队列尾部,成功返回true,失败(没有空间)返回false;
E remove();
获取并移除队列头部元素,如果队列为空,抛出NoSuchElementException异常;
E poll();
获取并移除队列头部元素,如果队列为空,返回null;
E element();
获取但不移除队列头部元素,如果队列为空,抛出NoSuchElementException异常;
E peek();
获取但不移除队列头部元素,如果队列为空,返回null;

Deque 双端队列用法
void addFirst(E e)/ void addLast(E e);
将对象e插入到双端队列头部/尾部,容间不足时,抛出IllegalStateException异常;
boolean offerFirst(E e)/boolean offerLast(E e);
将对象e插入到双端队列头部尾部;
E removeFirst()/E removeLast();
获取并移除队列第一个/最后一个元素,队列为空,抛出NoSuchElementException异常;
E pollFirst()/E pollLast();
获取并移除队列第一个/最后一个元素,队列为空,返回null;
E getFirst()/E getLast();
获取队列第一个/最后一个元素,但不移除,队列为空,抛出NoSuchElementException异常;
E peekFirst()/E peekLast();
获取队列第一个/最后一个元素,队列为空,返回null;

  • HashSet

add(Object obj)方法用于向Set集合中添加元素,添加成功返回true,否则返回false。重复元素不会被添加,返回false。
size() 方法:返回Set集合中的元素个数
remove(Object obj)方法 : 删除Set集合中的元素,删除成功返回true,否则返回false。
isEmpty()方法 : 如果Set不包含元素,则返回 true ,否则返回false
clear() 方法: 移除此Set中的所有元素
contains(Object o)方法:如果Set包含指定的元素,则返回 true,否则返回false
不保证顺序

  • TreeSet
Set不允许元素重复
HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。
TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口

HashSet是哈希表结构,主要利⽤ HashMap 的 key 来存储元素,计算插⼊元素的 hashCode 来获取元素在集合中的位置;
TreeSet是红⿊树结构,每⼀个元素都是树中的⼀个节点,插⼊的元素都会进⾏排序;
  • Priorityqueue
PriorityQueue用于存放含有**优先级**的元素,插入的对象必须可以比较,优先级由对象的自然顺序决定。
优先级队列的头部是基于自然排序或基于Comparator的排序的最小元素
具体使用参照:https://blog.csdn.net/u010675669/article/details/86503464
  • HashMap:https://www.runoob.com/java/java-hashmap.html
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.get(3) //查看
        Sites.remove(4); //删除
        Sites.containsKey(1);
        Sites.containsValue("G");
        //循环方式1
        for(Map.Entry<Integer, Integer> entry: map.entrySet()){
            if(entry.getValue() == 1){
                return entry.getKey();
            }
        }
        
  • TreeMap
Map是键值对,键不可以重复,值可以重复。
HashMap也用到了哈希码的算法,以便快速查找一个键
TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()- TreeMap 默认按照key升序排列

ref: https://www.cnblogs.com/taiwan/p/6954135.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值