java基礎5:集合

來源:互聯網
上載者:User

標籤:集合   javase   map   set   



關於Java基礎的文章,我覺得寫得還可以,以前發在了我其它的部落格了,肯定是原創,現在再分享給大家出來。


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


 一、概述

對象用於封裝特有資料,對象多了需要儲存,如果對象的個數不確定。就使用集合容器進行儲存。

java集合類主要負責儲存、盛裝其他資料,因此集合類也稱容器類。java集合類分為:set、list、map三大體系。



其中set代表無序、不可重複的集合;

------list代表有序、可重複的集合。

-----map代表具有映射關係的集合。

java中集合特點:
1,用於儲存物件的容器。
2,集合的長度是可變的。
3,集合中不可以儲存基礎資料型別 (Elementary Data Type)值。 



 二、集合架構

集合架構由來:

集合容器因為內部的資料結構不同,有多種具體容器。

不斷的向上抽取,就形成了集合架構。


這部分的知識還是比較多的,如果以前沒接觸過看文字敘述肯定把你看懵了,先看一下總體的架構圖



java集合類主要由兩個介面派生:Collection和Map,是集合架構的根介面。我們首先來介紹一下Collection介面

 三、Collection介面

1、概述

Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素。一些 Collection允許相同的元素而另一些不行。一些能排序而另一些不行。

由Collection介面派生的兩個介面是List和Set。



2、迭代

關於Collection的常見操作就不說了,大家查一下API文檔就會很清楚,這裡重點說一下迭代。

如何遍曆Collection中的每一個元素?根據上面的集合架構圖我們可以看出,不論Collection的實際類型如何,它都支援一個iterator()的方法,該方

法返回一個迭代子,使用該迭代子即可逐一訪問Collection中每一個元素。

舉例:

<span style="font-size:14px;"><pre name="code" class="java">Collection<String> c = new ArrayList<String>();//定義一個集合cCollection<String> c1 = new ArrayList<String>();//定義一個集合c1c.add("jin");//添加元素c.add("fulin");c1.add("uuu");c1.add("fff");c.addAll(c1);//將c1添加到c中Iterator<String> it = c.iterator();//定義一個迭代器itwhile(it.hasNext())//是否讀取到下一個元素?為真則列印System.out.println(it.next());</span>


 四、List

1、概述

List是有序的Collection,使用此介面能夠精確的控制每個元素插入的位置。使用者能夠使用索引(元素在List中的位置,類似於數組下標)來訪問List中的元素,這類似於Java的數組。

它包括三個子類ArrayList、LinkList、Vector,關於它們的關係,如

2、ListIterator介面

在迭代時,不可以通過集合對象的方法操作集合中的元素。

如果想要添加、修改操作,就需要使用其子介面:ListIterrator。

注意:只有list集合具備該迭代功能.

舉例:

<span style="font-size:14px;">List<String> list = new ArrayList<String>();list.add("jin");list.add("fulin");ListIterator<String> it = list.listIterator();System.out.println(list);while(it.hasNext()){Object obj = it.next();if (obj == "jin") {it.set("bbb");//注意是it的修改和添加,而不是listit.add("aaa");}}System.out.println(list);}</span>


 五、Set

1、概述

Set是一種不包含重複的元素的Collection,它包括兩種類,一個是HashSet、一個是TreeSet、對應著資料結構中的雜湊表雜湊表和數結構。




2、HashSet

HashSet: 內部資料結構是雜湊表 ,是不同步的。

A、如何保證該集合的元素唯一性呢?

是通過對象的hashCode和equals方法來完成對象唯一性的。‘

B、雜湊表如何判斷元素相同?

1、判斷hashCode是否相同?

2、若為ture,判斷equals是否相同?

3、若還為ture,視為相同元素不存。


所以:如果元素要儲存到HashSet集合中,必須覆蓋hashCode方法和equals方法。

<span style="font-size:14px;"><pre name="code" class="java">package cn.jinfulin.P.bean;/** * @author 金福林 * */public class Person  implements Comparable<Person>{//繼承Comparable介面private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person(String name, int age) {super();this.name = name;this.age = age;}public Person(){}public int hashCode() {<span style="white-space:pre"></span>//複寫hashCode編碼,這裡用的是自動產生的,可以自訂。final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}public boolean equals(Object obj) {//複寫equals方法,如果hashCode相同才判斷if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person other = (Person) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}}</span>


調用:

<span style="font-size:14px;">private static void myHashCodeDemo() {HashSet<Person> hs = new HashSet<Person>();hs.add(new Person("jin",12));hs.add(new Person("fu",22));hs.add(new Person("fu",12));hs.add(new Person("lin",15));/*for (Person p : hs) {//for迴圈的另一種形式,和下面的迭代器迴圈表達一個意思。System.out.println(p.getName()+":" + p.getAge());}*/Iterator<Person> it = hs.iterator();while(it.hasNext()){Person p  = it.next();System.out.println(p.getName()+":" + p.getAge());}}</span>




3、TreeSet

TreeSet:可以對Set集合中的元素進行排序。是不同步的。 

判斷元素唯一性的方式:

就是根據compareTo()或compare()方法的返回結果是否是0,是0,就是相同元素,不存。 


TreeSet對元素進行排序的方式一:

1、讓元素自身具備比較功能,就需要實現Comparable介面。覆蓋compareTo方法。

2、讓集合自身具備比較功能,定義一個類實現Comparator介面,覆蓋compare方法。將該類對象作為參數傳遞給TreeSet集合的建構函式。


<span style="font-size:14px;"><pre name="code" class="java">//方法一public class Person implements Comparable<Person>{//實現Cmopareable介面,定義泛型為Personprivate String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}/**建構函式 * @param name * @param age */public Person(String name, int age) {super();this.name = name;this.age = age;}public Person(){}public int compareTo(Person p) {//覆寫compareTo方法,因為添加泛型,所有傳參可以為Person類型//Person p = (Person) o;int temp = this.age - p.age;return temp == 0?this.name.compareTo(p.name):temp;}</span>


調用

<span style="font-size:14px;">private static void myTreeSetDemo() {TreeSet<Person> ts = new TreeSet<Person>();ts.add(new Person("jin",12));ts.add(new Person("fu",22));ts.add(new Person("fu",22));ts.add(new Person("lin",15));for (Person p : ts) {System.out.println(p.getName()+":" + p.getAge());}}</span>

<span style="font-size:14px;"><pre name="code" class="java">//方法二:public int compare(Person o1, Person o2) {int result = o1.getName().compareTo(o2.getName());return result == 0 ? o1.getAge()-o2.getAge():result;/*等同於上面的語句if (result == 0) {if(o1.getAge() - o2.getAge()==0){return 0;}}return result;*/}</span>


調用

<span style="font-size:14px;">private static void myTreeSetDemo2() {TreeSet<Person> ts = new TreeSet<Person>(new CompareByName());ts.add(new Person("jin",12));ts.add(new Person("fu",22));ts.add(new Person("fu",22));ts.add(new Person("lin",15));for (Person p : ts) {System.out.println(p.getName()+":" + p.getAge());}}</span>



 六、Map

1、概述

  Map<K,V>集合是一個介面,和List集合及Set集合不同的是,它是雙列集合,並且可以給對象加上名字,即(鍵)。

其實map集合中儲存的就是鍵值對。 

map集合中必須保證鍵的唯一性。 


2、Map與Collection區別

Map:一次添加一對元素。Collection 一次添加一個元素。

Map也稱為雙列集合,Collection集合稱為單列集合。


3、常用方法舉例:

<pre name="code" class="java"><pre name="code" class="java"><span style="font-size:14px;">public static void main(String[] args) {Map<Integer, String> m = new HashMap<Integer, String>();// 初始化m.put(1, "jin");m.put(2, "fu");m.put(3, "lin");m.put(4, "aaa");// m.clear(); //清空Map// Set<Entry<Integer, String>> sm = m.entrySet(); //讀取map的一種方式Set<Integer> sm = m.keySet();// 讀取map的第二種方式Iterator<Integer> it = sm.iterator();while (it.hasNext()) {Integer key = it.next();String value = m.get(key);System.out.println("鍵:" + key + "," + "值:" + value);}// System.out.println(m.get(1)); //get方法通過鍵擷取值}</span>





4、Map常用的子類:


|--Hashtable :內部結構是雜湊表,是同步的。不允許null作為鍵,null作為值。
|--Properties:用來儲存鍵值對型的設定檔的資訊,可以和IO技術相結合。
|--HashMap : 內部結構是雜湊表,不是同步的。允許null作為鍵,null作為值。
|--TreeMap : 內部結構是二叉樹,不是同步的。可以對Map集合中的鍵進行排序。 



 七、最後

本章內容比較多,感謝能看到這裡的朋友,要想學好,還需要大家對照圖,多整理,多思考,勤複習。



java基礎5:集合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.