Java集合

Posted zoukun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合相关的知识,希望对你有一定的参考价值。

Colllection接口

List接口(列表)

List的特点

  • 有序性
  • 允许有重复的元素

    List的常用方法

    方法名称 描述 返回类型
    add(Ele) 参数类型为Object (追加) boolean
    add(index,Ele) 指定位置添加元素 void
    addAll(Col) 参数为Collection集合 (追加) boolean
    addALL(index,Col) boolean
    contains(Ele) boolean
    containsAll(Col) boolean
    clear() 移除列表中的所有元素 void
    get(index) 返回索引为index的元素 void
    isEmpty() boolean
    size() 返回列表中元素个数 int
    remove(Ele/index) boolean
    removeAll(Col) boolean
    set(index,Ele) 将索引为index的元素替换为Ele 成功则,返回被被替换掉的元素
    toArray 返回一个对象数组(数组元素的顺序与列表一样) Object

ArrayList实现类

  1. 构造方法
ArrayList() 无参构造
ArrayLis(int Size) 指定初始容量
ArrayList(Col) 中的初始元素

Vector实现类

一般情况使用ArrayList代替

LinkedList实现类

  1. 构造方法
LinkedList() 无参构造
LinkedList(Col) 指定初始元素

List实现类

ArrayList的底层为数组LinkedList的底层为双链表
ArrayList和LinkedList的功能方法没有同步

数组转为列表

  • public static List asList(T array) //方法签名
public static void main(String[] args) {
        
        Integer[] array = {1,3,4,2,423,11,234,23,42,34,23};
        List lst = Arrays.asList(array);
        
        System.out.println( lst );
//      Iterator<Integer> iterator = lst.iterator();
//      while(iterator.hasNext()) {
//          System.out.println( iterator.next());
//      }   
    }

Set接口(集合)

Set的特点

  • 无序性
  • 不允许有重复的元素

    Set的常用方法

add(Ele) boolean
addAll(Col) boolean
clear() void
isEmpty() boolean
remove(Ele) boolean
removeAll(COl) boolean
size() int
contains(Ele) boolean
retainAll(Col) 将参数集合中有的元素从Set集合中移除 boolean
toArray() 对象数组

HashSet实现类

  1. 构造方法
HashSet() 无差构造,默认容量16
HashSet(int Size) 指定初始容量
HashSet(COl) 指定初始元素

HashSet允许添加null值但只能添加一次

LinkedHashSet实现类

  1. 特点
  • 采用双链表实现,有序,元素不重复。
  1. 构造方法
LinkedHashSet() 无参构造方法 初始容量16
LinkedHashSet(int Size)
LinkedHashSet( COl )

SortedSet接口与TreeSet实现类

  1. 特点:
  • SortedSet继承于Set接口,TreeSet为SortedSet的一个实现类
  • SortedSet是一个Sorted类型
  • 实现该接口的类将按元素的天然顺序自动排序,与插入的顺序无关。
  1. 常用方法
first() 返回第一个元素(最小的元素) Object
last() .. Object
headSet(Ele) 返回一个包含小于Ele的SortedSet sortedSet
tailSet(Ele) ...大于 sortedSet
subSet(fromEle,toEle) 返回>=formEle&&<toEle sortedSet
TreeSet实现类
  1. 特点

    天然有序,无论以什么顺序插入元素,在遍历的时候都是有序的

    没有采用哈希存储策略,TreeSet采用的是二叉树结构存储

  2. 构造方法

方法名称 描述
TreeSet() 无参构造,创建一个空的TreeSet对象
TreeSet( SortedSet s) 含有指定元素
TreeSet( Col ) 含有指定元素
TreeSet( Comparator c) 具有指定比较器的空TreeSet对象
定制SortedSet排序规则

实现Comparator接口(比较器)达到其他排序需求。(重写compare方法)

package test_02;
import java.util.*;
public class set_text {

    public static void main(String[] args) {
        
        Integer[] array = {1,3,4,2,4,11,234,23,42,34,23};
        List lst = Arrays.asList(array);

            Set<Integer> sortSet = new TreeSet<Integer>( new Agecompare() );
            sortSet.addAll(lst);
            System.out.println( sortSet );
        }

        public static class Agecompare implements Comparator<Integer> {
            public int compare(Integer o1, Integer o2) {
                return (int)o2-(int)o1; //逆序
        }
    }
}

Map接口

  1. 特点

    • Map也被称为健/值集合。
    • 键和值都是对象。
    • 健对象用来在Map中唯一标识一个值对象。
    • 健对象在Map中不能重复出现。*

Map接口的常用方法

clear() void
containsKey(key) boolean
containsValue(value) boolean
get(key) 获取健名为key的健值 Object
isEmpty() boolean
put(key,value) 如果存在key,这将value添加进去并与其关联,不存在这都添加然后关联起来 Object,返回value
putAll(Map t) ... void
remove(key) 移除key所关联的值value,并将其值value返回 Object
size() 返回键值对的个数 int

HashMap 实现类

  1. 特点:
  • 该类通过对键计算哈希码来决定值的存储。
  • 键值允许为nul
  • 无序
  1. 构造方法
方法名 描述 返回值类型
HashMap() 无参构造,初始容量为16
HashMap(Map m) 指定初始内容

Hashtable实现类

一般情况用HahMap代替

LinkedHahMap实现类

  1. 特点
  • 通过双链表的方式实现Map
  • Oredered类型
  • 插入删除效率比HashMap低。
  • 顺序存储
  1. 构造方法
LinkedHashMap() 无参构造
LinkedHashMap(int Size)
LinkedHashMap(Map m)

SortedMap接口与TreeMap实现类

  1. 特点
  • SortedMap为一个继承于Map的接口,TreeMap为SortedMap的一个实现类。
  • 实现SortedMap的接口类不管以什么顺序插入元素,都会按键的天然顺序自动排序。
  1. SortedMap的常用方法
firstKey() 返回SortedMap中第一个对象(最小的元素) Object
lastKey()) ...最大.. Object
headSet(Ele) SortMap
TrailSet(Ele) SortMap
subSet(formElE,lastEle) SortedMap

TreeMap实现类

  1. 特点
  • 天然有序(一键名为依据)
  1. 构造方法
TreeMap() 无参构造,创建一个空的TreeMap对象
TreeMap(SortedMap s) 指定初始元素
TreeMap(Map c)
TreeMap(COmparator c) 指定比较器

java.uitl.Stack
继承于Vector类,利用Vector实现的

  1. Stack的常用方法
empty() booean
peek() 查看栈顶元素 Object
pop() 移除栈顶元素 Object
push(Ele) 将Ele元素进栈
search(Object 0 ) 返回指定元素Ele在栈中的位置,没有返回-1 int

队列

  • Deque接口
  1. Deque接口的常用方法
peek() 返回队列中的第一个元素,队列为空则返回null Object
size() int
pop() 移除队列中的第一个元素,队列为空则抛出异常 Object
push(Object o) 添加...,队列满时抛出异常 void
  • ArrayDeque实现类
  1. ArrayDeque的构造方法
ArrayDeque()
ArrayDeque(int size) 指定初始容量
ArrayDeque(COl) 指定初始元素

遍历

  1. 特点
    • 对于List而言,可以通过索引来遍历
    • 对Set而言,可以使用迭代器
    • 所有实现Collection接口的类都有一个Iterator的方法来获取迭代器

Iterator

  1. Iterator的常用方法
HashNext() 判断是否还有没有遍历的元素 boolean
next() 获取到集合中下一个将要遍历的元素,如果没有要遍历的元素则,抛出NoSuchElementException异常 Object
remove() 将下一个要遍历的元素从遍历的范围中移除 void

集合的遍历

  1. 迭代器遍历:
    package test_02;
import java.util.*;
public class set_text {
    public static void main(String[] args) {
        
        Integer[] array = {1,3,4,2,4,11,234,23,42,34,23};
        List lst = Arrays.asList(array);
        
        TreeSet<Integer> sortSet = new TreeSet<Integer>( lst );
        
        Iterator<Integer> iterator = sortSet.iterator();    //获取迭代器
        
        while(iterator.hasNext()) {
            System.out.print(iterator.next()+ ",");
        }   
    }
}
  1. for-each遍历:
package test_02;
import java.util.*;
public class set_text {
    public static void main(String[] args) {
        
        Integer[] array = {1,3,4,2,4,11,234,23,42,34,23};
        List lst = Arrays.asList(array);
        
        TreeSet<Integer> sortSet = new TreeSet<Integer>( lst );
        
        Iterator<Integer> iterator = sortSet.iterator();    //获取迭代器
        
        for (Integer valeu : sortSet) {
            System.out.print(valeu + ", "); 
        }   
    }
}
  1. List的索引遍历

    package test_02;
    import java.util.*;
    public class set_text {
    
        public static void main(String[] args) {
    
            Integer[] array = {1,3,4,2,4,11,234,23,42,34,23};
            List lst = Arrays.asList(array);
    
    
            for(int i=0 ;i<lst.size();i++) {
                System.out.print( lst.get(i)+ "," );
            }
        }
    }

映射的遍历

1.Map提供的获取键或值的方法

名称 描述 返回值类型
keySet() 返回一个包含map中所有键的对象的集合 Set
values() 返回一个包含map中所有值对象的集合 Collection

集合元素的常用操作

  1. 描述

    java.util.Collections类是一个工具类,该类的方法都是静态方法。
    方便对集合的排序,搜索等操作。

元素的排序

collections提供了两个sort方法用于对元素的排序。

public static void sort(List list)
public static void sort(List list,comparator c)

搜索特定元素

collections提供了两个binarySearch方法用来搜索列表中特定元素
binarySeach方法常用的是二分法搜索,只能对已有序的列表搜索。

public static int binarySearch(List list,Object Ele)
public static int binarySearch(List list,Object Ele,comparator c)

任意打乱元素的顺序

collections提供了suffle方法来打乱列表中元素的顺序。

public static void shuffle(List list)

其他方法(静态)

addAll(col,Object o) 将对象o添加到col( collection )集合中 boolean
copy(List ls1,List ls2) 将列表ls2中的内容复制到ls1中 void
disjoint(col_1,col_2) 比较col_1与col_2是否有相同的元素,没有则返回false boolean
fill(List ls,Object o) 填充 void
reverse(List ls) 将列表ls反转 void
swap(List ls,int i,int j) 交换ls列表中索引为i和j所对应的值 void

hashCode方法

使用哈希时,本存储的对象需要一个哈希码(hash code 一般是一个整数)。
hashCode方法用于计算提供一个哈希码。
工作原理:
技术图片

进入哈希存储之前,首先调用hashSet获取一个哈希码,来定位哈希桶
在哈希桶中,不同对象是按照线性表的方式存储的
哈希码决定了分离度,处理好分离度是提高效率的关键因素
  • eg: 在向HashSet集合添加(调用add方法)元素时,会首先调用hashCode方法来定位哈希桶,如果是空桶就会直接存进去,否者会调用equals方法来查看该桶中是否含有与其相同的对象,没有则存进去,否者存储失败。
  • 所以通常情况下,equals与hashCode要么都重写,要么都不重写。且equals为true的两个对象的hashCode必须相同,hashCode不相同的两个对象的equals必须为false。

技术图片

以上是关于Java集合的主要内容,如果未能解决你的问题,请参考以下文章

201621123062《java程序设计》第九周作业总结

Java方法

金蝶handler中 collection 代码片段理解

Alfred常见使用

比较 C# 中的字符串片段并从集合中删除项目

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]