List和Set集合使用
Java提供的眾多集合類由兩大接口衍生而來:單列集合Collection和雙列集合Map
Collection接口
Collection接口是所有單列集合的父接口 ,每次儲存一個元素,接口的主要方法包括:
- public boolean add(E e) : 把給定的對象添加到當(dāng)前集合中 。
- public? void clear() :清空集合中所有的元素。
- public boolean remove(E e) : 把給定的對象在當(dāng)前集合中刪除。
- public boolean contains(E e) : 判斷當(dāng)前集合中是否包含給定的對象。
- public boolean isEmpty( ): 判斷當(dāng)前集合是否為空。
- public?int size() :返回集合中元素的個數(shù)。?
- public Object[] toArray() : 把集合中的元素,存儲到數(shù)組中。
方法演示如下:
import java.util.ArrayList; import java.util.Collection;public class Demo1Collection {public static void main(String[] args) {// 創(chuàng)建集合對象 // 使用多態(tài)形式Collection<String> coll = new ArrayList<String>();// 使用方法// 添加功能 boolean add(String s)coll.add("小李廣");coll.add("掃地僧");coll.add("石破天");System.out.println(coll);// boolean contains(E e) 判斷o是否在集合中存在System.out.println("判斷 掃地僧 是否在集合中"+coll.contains("掃地僧"));//boolean remove(E e) 刪除在集合中的o元素System.out.println("刪除石破天:"+coll.remove("石破天"));System.out.println("操作之后集合中元素:"+coll);// size() 集合中有幾個元素System.out.println("集合中有"+coll.size()+"個元素");// Object[] toArray()轉(zhuǎn)換成一個Object數(shù)組Object[] objects = coll.toArray();// 遍歷數(shù)組for (int i = 0; i < objects.length; i++) {System.out.println(objects[i]);}// void clear() 清空集合coll.clear();System.out.println("集合中內(nèi)容為:"+coll);// boolean isEmpty() 判斷是否為空System.out.println(coll.isEmpty()); } }且collection有兩個重要的子接口,分別是Set和List。其中,List的特點是元素有序、元素可重復(fù)。Set的特點是元素?zé)o序,而且不可重復(fù)。List接口的主要實現(xiàn)類有java.util.Arraylist和java.util.Linkedlist,Set接口的主要實現(xiàn)類有java.util.HashSet、java.util.LinkedHashSet和java.util.TreeSet。
List集合
List作為Collection集合的子接口,用于定義以列表形式存儲的集合,List接口為集合中的每個對象分配了一個索引(index),標(biāo)記該對象在List中的位置,并可以通過index定位到指定位置的對象。List在Collection基礎(chǔ)上增加的主要方法包括:
- public void add(): 將指定的元素,添加到該集合中的指定位置上。
- public E get(int index):返回集合中指定位置的元素。
- public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
- public E set(int index,E element):用指定元素替換集合中指定位置的元素,返回值是更新前的元素。
List接口的常用實現(xiàn)類:
ArrayList
ArrayList基于數(shù)組來實現(xiàn)集合的功能,其內(nèi)部維護(hù)了一個可變長的對象數(shù)組,集合內(nèi)所有對象存儲于這個數(shù)組中,并實現(xiàn)該數(shù)組長度的動態(tài)伸縮
ArrayList使用數(shù)組拷貝來實現(xiàn)指定位置的插入和刪除:
插入:
刪除:
LinkedList
LinkedList基于鏈表來實現(xiàn)集合的功能,其實現(xiàn)了靜態(tài)類Node,集合中的每個對象都由一個Node保存,每個Node都擁有到自己的前一個和后一個Node的引用
LinkedList追加元素的過程示例:
?
ArrayList 和 LinkedList區(qū)別:
Vector
Vector和ArrayList很像,都是基于數(shù)組實現(xiàn)的集合,它和ArrayList的主要區(qū)別在于
- Vector是線程安全的,而ArrayList不是
- 由于Vector中的方法基本都是synchronized的,其性能低于ArrayList
- Vector可以定義數(shù)組長度擴(kuò)容的因子,ArrayList不能
Set集合
Set接口和List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進(jìn)行功能上的擴(kuò)充,只是比Collection接口更加嚴(yán)格了。與List接口不同的是,Set接口中元素?zé)o序,并且都會以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。?
Set接口的常用實現(xiàn)類:
HashSet
HashSet是Set接口的一個實現(xiàn)類,它所存儲的元素是不可重復(fù)的,并且元素都是無序的(即存取順序不一致) 。
HashSet是根據(jù)對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。保證元素唯一性的方式依賴于:hashcode與equals方法。所以,給HashSet中存放自定義類型元素時,需要重寫對象中的hashCode和equals方法,建立自己的比較方式,才能保證HashSet集合中的對象唯一 。
LinkedHashSet
我們知道HashSet保證元素唯一,可是元素存放進(jìn)去是沒有順序的,那么我們要保證有序,怎么辦呢?
在HashSet下面有一個子類java.util.LinkedHashSet,它是鏈表和哈希表組合的一個數(shù)據(jù)存儲結(jié)構(gòu),能夠保證順序的有效輸出。
演示代碼如下:
public class LinkedHashSetDemo {public static void main(String[] args) {Set<String> set = new LinkedHashSet<String>();set.add("bbb");set.add("aaa");set.add("abc");set.add("bbc");Iterator<String> it = set.iterator();while (it.hasNext()) {System.out.println(it.next());}} }結(jié)果:
? bbb
? aaa
? abc
? bbc
總結(jié)
以上是生活随笔為你收集整理的List和Set集合使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: packageinfo.java_pac
- 下一篇: 单片机wifi模块与服务器通信协议,单片