一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java集合框架詳解

java集合框架詳解

2020-07-24 13:37java135 Java教程

本文主要介紹了java集合框架的相關知識。具有一定的參考價值,下面跟著小編一起來看下吧

1.java集合框架概述

java SE包含了由一組類和接口組成的java集合框架(java Collection Framework,簡稱JCF),其主要功能是用來將存儲的數據以某種結構組織,并以特定的方式來訪問這些數據,其目標是提供一個處理對象集合的通用框架,減少程序員處理不同對象集合時的編碼量。 

集合類中的一些區別,除了它們是否支持重復元素操作外,還包括元素是否有順序,以及是否允許添加null元素。java集合框架中根據這三個區別,將對象的存儲方式分為三種類型,分別是: 

  1. Set(集):對象容器中的對象沒有順序,且不能重復。 
  2. List(列表):對象容器中的對象按照索引順序排序,而且可以有重復的對象。 
  3. Map(映射):對象容器中的元素包含一對“鍵對象-值對象”映射,其中鍵對象不能重復,值對象可以重復。

為支持對象的排序和遍歷訪問操作,java集合框架中又提供了幾個接口: 

  1. 接口SortedSet為Set類型容器提供拍戲功能。  
  2. 接口SortedMap為Map類型容器提供對鍵對象的排序。 
  3. 接口Comparable和comparator用來實現集合中對象的排序。 

2.Collection接口和Iterator接口

Collection接口中定義了Collection對象共有的一些基本方法

 

方法  描述
int size() 返回當前集合中包含的元素個數 
isEmpyt() 判斷集合中是否含有元素
boolean contains(Objact o) 判斷集合中是否含有某一指定元素
add(Objact o) 向集合中添加某一個元素
remove(Objact o) 從集合中刪除某一元素
Iterator iterator() 返回一個遍歷器,用來訪問集合中的各個元素

 

Iterator接口是一種用于遍歷集合的接口。

 

Iterator接口中的方法
方法 描述
hasNext() 如果集合中還有更多元素,該方法返回true
next() 返回集合中的下一個元素
remove() 刪除Iterator返回的最后一個元素

 

1.List接口 

List接口繼承自Collection接口,它有如下特點: 

  1. List中的元素是有順序的。 
  2. List通常允許重復元素。 
  3. List的實現類通常支持null元素。 
  4. 可以通過索引訪問List對象容器中的元素。    

List接口最常用的實現類是ArrayList類和LinkedList類。

1).ArrayList 

程序實例: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package lei;
  import java.util.ArrayList;
  import java.util.List;
  public class Test {
    public static void main(String[] args) {    
      List list = new ArrayList<>();
      list.add(1);
      list.add("zhangsan");
      list.add(false);
      list.add('a');
      list.add(0, "lisi");
      list.add(1);
      list.remove(1);
      list.remove(2);
      list.set(0, "wangwu");
      for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
      }
    }
  }

Object類定義的equals()方法只有在傳遞給該方法的對象與調用該方法的對象是同一對象的時候,才會返回true。可以通過重寫equals()方法來把具有相同狀態的兩個對象被看做是同一對象。

2).LinkedList 

 

方法 描述
void addFirst 在鏈表開頭添加一個對象
void addLast 在鏈表末尾添加一個對象
getFirst() 返回鏈表中的第一個元素
getLast() 返回鏈表中的最后一個元素
removeFirst() 刪除鏈表中的第一個元素
removeLast() 刪除鏈表中的最后一個元素

 

程序實例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package lei;
  import java.util.LinkedList;
  import java.util.List;
  public class Test2 {
      public static void main(String[] args) {
       LinkedList l=new LinkedList<>();
      l.add("zhangsan");
      l.add("lisi");
      l.addFirst(1);
      l.addLast(4);
      System.out.println(l.getFirst());
      System.out.println(l.getLast());
      l.removeFirst();
      l.removeLast();
      for (int i = 0; i < l.size(); i++) {
        System.out.println(l.get(i)); 
      
    }
  }

LinkedList與ArrayList的選擇

如果列表需要快速存取,但不經常進行元素的插入和刪除操作,那么選擇ArrayList會好一些;如果需要對;列表進行頻繁的插入和刪除操作,那么就應該選擇LinkedList。

2.set接口 

set接口繼承自Collectiion接口,同時也繼承了Collection接口的全部方法。set接口有以下特點:

  1. Set類型容器中不能包含重復元素。當加入一個元素到容器中時,要比較元素的內容是否存在重復的,所以加入Set類型對象容器的對象必須重寫equals()方法。 
  2. 元素能能有順序,也可能沒有順序。 
  3. 因為元素可能沒有順序,所以不能基于下標訪問Set中費元素。 

實現Set接口最常用的是HashSet類和TreeSet類。

1).Hashset

Hashset類是基于哈希算法的Set接口實現,它主要有如下幾個特點: 

  1. 當遍歷Hashset時,其中的元素是沒有順序的。 
  2. Hashset中不允許出現重復元素。這里的重復元素是指有相同的哈希碼,并且用equals()方法進行比較時,返回true的兩個對象。 
  3. 允許包含null元素。

如果我們編寫的類重新定義了equals方法,那么這個類也必須重新定義hashCode()方法,并且保證當兩個對象用equals方法比較結果為true時,這兩個對象的hashCode()方法的返回值相等。 

程序實例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package lei;
  import java.util.HashSet;
  import java.util.Set;
  public class Test4 {
      public static void main(String[] args) {
      Set<String> set=new HashSet<String>();
      set.add("zhangsan");
      set.add("lisi");
      for(String s:set){
        System.out.println(s);
      }
    }
  }

2).TreeSet

TreeSet類不僅實現類Set接口,還實現了SortedSet接口,從而保證集合中的對象按照一定的順序排序。當向TreeSet集合中添加一個對象時,會把它插入到有序的對象序列中,但是這種排序并不是按照對象添加的順序排序,而是按照一定的算法來排序。 

TreeSet使用元素的自然順序對元素進行排序,或者根據創建Set時提供的Comparator進行排序。TreeSet支持自然排序和自定義排序兩種排序方式。

3.Map接口

Map(映射)接口是java集合框架中不同于Collection接口的另一個重要接口,它對應的是在一種從鍵(Key)到值(Value)的對應關系的集合。Map類型的對象容器里面保存著兩組對象,一組對象用于保存Map里的Key,另外一組用于保存Value。Key和Value可以升級任何引用類型的數據。Key不能重復,但是Value可以重復。

1).HashMap  

HashMap是基于哈希算法的Map接口的實現。HashMap將它的鍵保存在哈希表中進行維護,鍵是唯一的。但是,HashMap并不保證鍵以特定順序排列,特別是不保證順序永久不變。 

HashMap類實現了Map接口,從而具有Map接口的所有方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package day1228;
  import java.util.*;
  public class HashMapDemo {
    public static void main(String[] args) {
      // 創建一個新的HashMap
      Map<String, String> map = new HashMap<String, String>();
      map.put("a1", "xiao");
      map.put("b2", "xiaol");
      map.put("a4", "xiaosd");
      map.put("b1", "12a");
      map.put("a3", "1");
      // 使用iterator遍歷 鍵和值
      System.out.println("之前的Map值是:");
      Set<String> keys = map.keySet();
      for (Iterator<String> i = keys.iterator(); i.hasNext();) {
        String key = i.next();
        String value = map.get(key);
        System.out.println(key + "=" + value);
      }
      // 刪除鍵為"a4"的值
      System.out.println("\n刪除鍵值為a4的元素");
      map.remove("a4");
      // //使用iterator遍歷 鍵和值
      System.out.println("\n之后的Map值:");
      keys = map.keySet();
      for (Iterator<String> i = keys.iterator(); i.hasNext();) {
        String key = i.next();
        String value = map.get(key);
        System.out.println(key + "=" + value);
      }
    }
  }

2).TreeMap

TreeMap類是基于紅黑樹算法的Map接口實現。TreeMap中鍵的存放方式與TreeSet相似,它將鍵存放在樹中,鍵的順序按照自然順序或者自定義順序兩種方式排列。 

程序實例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package day1228;
  import java.util.*;
  public class TreeMapDemo {
    public static void main(String[] args) {
      //創建一個新的TreeMap
      Map<Integer, String> map = new TreeMap<Integer, String>();
      map.put(1, "one");
      map.put(2, "two");
      map.put(3, "three");
      map.put(4, "four");
      map.put(5, "five");
      //使用iterator顯示鍵和值
      System.out.println("之前的map值為:");
      Set<Integer> keys=map.keySet();
      for(Object key:keys){
        String value=map.get(key);
        System.out.println(key+"="+value);
      }
      //刪除鍵為3的值
      System.out.println("\n刪除鍵值為3的元素");
      map.remove(3);
      //使用iterator顯示鍵和值
      System.out.println("\n之后的值Map為:");
      for(Object key:keys){
        String value=map.get(key);
        System.out.println(key+"="+value);
      }
    }
  }

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務器之家!

原文鏈接:http://www.cnblogs.com/xxt1994/p/6262953.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 半挠脚心半黄的网站 | 欧美精品色精品一区二区三区 | 青青草原手机在线视频 | 91久久青青青国产免费 | 国产亚洲一区二区三区 | 大妹子最新视频在线观看 | 精品在线91 | 久久久久久免费高清电影 | 久久精品99国产精品日本 | 国产一区二区三区丶四区 | 赤坂丽女医bd无删减在线观看 | 国产永久免费视频m3u8 | 日韩亚洲欧美理论片 | 国内精品久久久久久中文字幕 | 免费看男女做好爽好硬视频 | 成人在线视频国产 | 极品ts赵恩静和直男激战啪啪 | 国产五月天在线 | 亚洲天堂免费观看 | 美女被的在线网站91 | 国产探花在线视频 | 亚洲欧美久久久久久久久久爽网站 | 久久免费国产视频 | ysl千人千色t9t9t9 | 国内交换一区二区三区 | 国产免费又粗又猛又爽视频国产 | 国产日韩欧美综合在线 | 日本中文字幕一区二区三区不卡 | 羞羞影院午夜男女爽爽影院网站 | 日韩欧美国产一区 | 新版孕妇bbwbbwbbw | 青草青青在线视频观看 | 国精品午夜dy8888狼人 | 大胆国模一区二区三区伊人 | 亚洲免费在线观看视频 | 国产精品主播在线 | 日本在线观看www鲁啊鲁视频 | 国产精品久久久久久久久久久搜索 | 日韩精品一区二区三区毛片 | 国产卡一卡二卡三乱码手机 | 国产亚洲一级精品久久 |