Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung des Java-Sammlungsframeworks

Detaillierte Erläuterung des Java-Sammlungsframeworks

高洛峰
高洛峰Original
2017-01-23 10:29:171783Durchsuche

1. Überblick über das Java Collection Framework

Java SE enthält das Java Collection Framework (JCF), das aus einer Reihe von Klassen und Schnittstellen besteht Speichern gespeicherter Daten in Das Ziel besteht darin, einen gemeinsamen Rahmen für die Verarbeitung von Objektsammlungen bereitzustellen und den Codierungsaufwand zu reduzieren, den Programmierer bei der Verarbeitung verschiedener Objektsammlungen benötigen.

Einige Unterschiede zwischen Sammlungsklassen umfassen neben der Frage, ob sie wiederholte Elementoperationen unterstützen, auch die Frage, ob die Elemente geordnet sind und ob Nullelemente hinzugefügt werden dürfen. Basierend auf diesen drei Unterschieden unterteilt das Java Collection Framework die Speichermethoden von Objekten in drei Typen:

Set (Set): Die Objekte im Objektcontainer haben keine Reihenfolge und können nicht wiederholt werden.

Liste: Die Objekte im Objektcontainer sind in Indexreihenfolge sortiert und es können doppelte Objekte vorhanden sein.

Zuordnung: Die Elemente im Objektcontainer enthalten ein Zuordnungspaar „Schlüsselobjekt-Wertobjekt“, wobei das Schlüsselobjekt nicht wiederholt werden kann und das Wertobjekt wiederholt werden kann.

Um Objektsortierung und Traversal-Zugriffsvorgänge zu unterstützen, stellt das Java-Collection-Framework mehrere Schnittstellen bereit:

Die Schnittstelle SortedSet stellt Filming-Funktionen für Set-Typ-Container bereit.

Die Schnittstelle SortedMap ermöglicht die Sortierung von Schlüsselobjekten für Container vom Typ Map.

Die Schnittstellen Comparable und Comparator werden zum Sortieren von Objekten in der Sammlung verwendet.

2. Collection-Schnittstelle und Iterator-Schnittstelle

Collection-Schnittstelle definiert einige grundlegende Methoden, die Collection-Objekten gemeinsam sind

Detaillierte Erläuterung des Java-Sammlungsframeworks

Iterator-Schnittstelle ist eine Schnittstelle zum Durchlaufen von Sammlungen.

Detaillierte Erläuterung des Java-Sammlungsframeworks

1.Listenschnittstelle

Die Listenschnittstelle erbt von der Sammlungsschnittstelle. Sie weist die folgenden Eigenschaften auf:

Die Elemente in der Liste sind in Reihenfolge von.

Liste erlaubt normalerweise doppelte Elemente.

Listenimplementierungsklassen unterstützen normalerweise Nullelemente.

Auf Elemente im Listenobjektcontainer kann per Index zugegriffen werden.

Die am häufigsten verwendeten Implementierungsklassen der List-Schnittstelle sind die ArrayList-Klasse und die LinkedList-Klasse.

1).ArrayList

Programmbeispiel:

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(&#39;a&#39;);
      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));
      }
    }
  }

Die von der Object-Klasse definierte Methode equal() vergleicht nur das an die Methode übergebene Objekt mit dem aufrufenden Objekt Die Methode True wird nur zurückgegeben, wenn es sich um dasselbe Objekt handelt. Sie können zwei Objekte mit demselben Status als dasselbe Objekt behandeln, indem Sie die Methode equal() überschreiben.

2).LinkedList

Detaillierte Erläuterung des Java-Sammlungsframeworks

Programmbeispiel:

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));  
      }  
    }
  }

Auswahl von LinkedList und ArrayList

If-Liste Wenn Sie schnellen Zugriff benötigen, aber nicht häufig Elemente einfügen und löschen, ist es besser, ArrayList zu wählen. Wenn Sie häufig Einfügungs- und Löschvorgänge für die Liste durchführen müssen, sollten Sie LinkedList wählen.

2.Set-Schnittstelle

Die Set-Schnittstelle erbt von der Collection-Schnittstelle und erbt auch alle Methoden der Collection-Schnittstelle. Die Set-Schnittstelle weist die folgenden Eigenschaften auf:

Set-Typ-Container können keine doppelten Elemente enthalten. Beim Hinzufügen eines Elements zum Container muss verglichen werden, ob der Inhalt des Elements dupliziert wird. Daher muss das dem Objektcontainer vom Typ „Set“ hinzugefügte Objekt die Methode equal() überschreiben.

Elemente können in Ordnung sein oder auch nicht.

Da die Elemente möglicherweise nicht in der richtigen Reihenfolge sind, kann auf die Elemente im Set nicht basierend auf Indizes zugegriffen werden.

Die HashSet-Klasse und die TreeSet-Klasse werden am häufigsten zum Implementieren der Set-Schnittstelle verwendet.

1).Hashset

Die Hashset-Klasse ist eine Set-Schnittstellenimplementierung, die auf dem Hash-Algorithmus basiert. Sie weist hauptsächlich die folgenden Eigenschaften auf:

Beim Durchlaufen des Hashsets werden die Elemente Darin gibt es keine Ordnung.

Doppelte Elemente sind in Hashset nicht zulässig. Die doppelten Elemente beziehen sich hier auf zwei Objekte, die denselben Hash-Code haben und beim Vergleich mit der Methode equal() „true“ zurückgeben.

darf Nullelemente enthalten.

Wenn die Klasse, die wir schreiben, die Methode equals neu definiert, muss diese Klasse auch die Methode hashCode() neu definieren und sicherstellen, dass, wenn zwei Objekte mit der Methode equals verglichen werden und das Ergebnis wahr ist, der hashCode des Die Rückgabewerte der beiden Objekte ()-Methoden sind gleich.

Programmbeispiel:

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

Die TreeSet-Klasse implementiert nicht nur die Set-Schnittstelle, sondern auch die SortedSet-Schnittstelle und stellt so sicher, dass die Objekte im Set folgen Sie einer bestimmten Reihenfolge der Sortierung. Wenn ein Objekt zur TreeSet-Sammlung hinzugefügt wird, wird es in die geordnete Reihenfolge der Objekte eingefügt. Diese Sortierung erfolgt jedoch nicht nach der Reihenfolge, in der die Objekte hinzugefügt werden, sondern nach einem bestimmten Algorithmus.

TreeSet sortiert die Elemente in ihrer natürlichen Reihenfolge oder gemäß dem beim Erstellen des Sets bereitgestellten Komparator. TreeSet unterstützt zwei Sortiermethoden: natürliche Sortierung und benutzerdefinierte Sortierung.

3.Kartenschnittstelle

Map(映射)接口是java集合框架中不同于Collection接口的另一个重要接口,它对应的是在一种从键(Key)到值(Value)的对应关系的集合。Map类型的对象容器里面保存着两组对象,一组对象用于保存Map里的Key,另外一组用于保存Value。Key和Value可以升级任何引用类型的数据。Key不能重复,但是Value可以重复。

1).HashMap  

HashMap是基于哈希算法的Map接口的实现。HashMap将它的键保存在哈希表中进行维护,键是唯一的。但是,HashMap并不保证键以特定顺序排列,特别是不保证顺序永久不变。 

HashMap类实现了Map接口,从而具有Map接口的所有方法。

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相似,它将键存放在树中,键的顺序按照自然顺序或者自定义顺序两种方式排列。 

程序实例:

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);
      }
    }
  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持PHP中文网!

更多Detaillierte Erläuterung des Java-Sammlungsframeworks相关文章请关注PHP中文网!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn