データ構造-Listインタフェース-Link edListクラス-setインタフェース-HashSetクラス-Collectionまとめ


一.データ構造:4種類--
1.スタック構造:
特徴:LIFO(後進先出);スタックの入り口/出口はすべて先端の位置にあります.スタックを押すのは要素を保存することです/スタックを弾くのは要素を取ることです;
代表類:Stack;
その他:mainメソッドの最後の外出;
2.配列構造:
特徴:連続した空間;インデックスがあり、検索が速い.削除が遅い
代表クラス:ArrayList;
適用シーン:天気予報などの多くのシーンをクエリーするために使用します.
3.キュー構造:
特徴:FIFO(先進先出);入口/出口は両側にあります.
代表:Queueインタフェース
アプリケーションシーン:12306チケット購入サイト
4.チェーンテーブル構造:
特徴:削除が速く、検索が遅い;
代表:LinkedListクラス;Linkedの先頭はチェーンテーブル構造である.
適用シーン:モニタリングなど;履歴操作/ログ;
二.Listインタフェース:(java.util)
定義:public interface List extends Collection{}
ListインタフェースはCollectionのサブインタフェースの1つに属する、Collectionのすべての方法、Listインタフェースのオブジェクトが使用できる.
特徴:秩序正しく、インデックス付きで、繰り返しを許可し、複数のnull値を格納することができる.
共通サブクラス:ArrayList;LinkedList;
一般的な方法:
public void add(int index,E element){}指定された位置に要素を追加します.
public boolean addAll(int index,Collection extends E>c){}指定された場所に要素のセットを追加します.
E get(int index){}は、指定された位置の要素を返します.
public int indexOf(Object o){}指定した要素の場所を検索します.
public int lastIndexOf(Object o){}指定した要素の位置を後から前へ検索します.
public ListIterator listIterator(){}はListIteratorのインスタンス化である.
public E remove(int index){}指定した位置で要素を削除します.
public List subList(intFromIndex,intToIndex){}コレクションのサブコレクションを取り出す;
public E set(int index,E element){}指定された位置の要素を置き換えます.
コードデモ://ListIterator
/*List       ListIterator, Iterator           
1.boolean hasPrevious():                    ;
2.Object previous():           ;
3.void add(Object o):           ;*/
import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;
public class ListIteratorDemo{
public static void main(String[] args){
String[] names = {"jack","rose","tom"};
List list = new ArrayList<>();
for(int i = 0; i  lit = list.listIterator();
//    
while(lit.hasNext()){
System.out.print(lit.next()+"\t");//jackrosetom
}
System.out.println("
===== =========="); // while(lit.hasPrevious()){ System.out.print(lit.previous()+"\t");//tomrosejack } } }

三.LinkedListクラス:(java.util)
定義:public class LinkedList extends AbstractSequentialList implements List,Deque,Cloneable,Serializable
Listインタフェースの実装クラスです.
特徴:LinkedListのデータストレージ構造はチェーンテーブル構造であるが、チェーンテーブル構造をキュー/両端キュー/スタックとして使用することも可能である.
構築方法:
LinkedList()
LinkedList(Collection extends E> c);集合を複製する場合、この構造方法で直接集合を入れればよい.
固有の方法:
public void addFirst():0位置に追加;
public void addLast():addに等しく、最後に追加します.
E getFirst():コレクション内の最初の要素を返します.
E getLast():コレクションの最後の要素を返します.
E removeFirst():最初の要素を削除して返します.
E removeLast();最後の要素を削除して返します.(この2つのremoveがLinkedListを使用することを考えているため).
E poll():ヘッダーを見つけて削除します.スタックとして使用され、removeFirstに似ています.
E pollFirst():最初の要素を削除して返します.
E pollLast():最後の要素を削除して返します.
E pop():removeFirst()と同様にスタックとして使用
E push():addFirst()と同様にスタックとして使用
コードデモ://offer()/offerFirst()/push()/peekFirst()/peekLast()/pop()/pollLast()
import java.util.LinkedList;
public class LinkedListDemo{
public static void main(String[] args){
LinkedList books = new LinkedList<>();
//             
books.offer("java  ");
//             
books.offerFirst("android   ");
//            
books.push("java ee   ");
// list  (  )      
for(int i = 0; i  
  


.Set :(java.util)

:public interface Set extends Collection{} Collection , ;

: , , , null ;

set Collection , Collection , ;

:

TreeSet:

HashSet:

LinkedHashSet: HashSet ,


.HashSet :(java.util)

:public class HashSet extends AbstractSet implements Set, Cloneable, Serializable

: , .

, hash , , hash ; hash ;

:

1. :Hash table, , (Key value) 。 ,

, 。 , 。

2. :hash , !

3.Obect HashCode , hash ;

4. :

(1) equals(Object) , , hash value .

(2) equals(Object) , , hash value .

(3) Java , hashCode , .

(4) ,hash value 。

:

HashSet()

HashSet(Collection extends E> c)

HashSet :

set , equals hashCode , , , ! set .

:

/*class        :private String name; private int age;hashCode() equals()      */
@Override
public int hashCode(){
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj){
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;
}

. の を するルール
1.listが の を するルール( メソッド:remove,contains):
equals の にのみ する.hashCodeメソッドを き えるかどうかは ありません.
2.set の を するルール:( :add,remove,contains)
(1) オブジェクトのhash が であるか かを する.
1.1:2つのオブジェクトのhash が なり、 の もせず、 を します.この2つのオブジェクトは しくありません.
1.2:2つのオブジェクトのhash は じで、2 のステップの を します.
(2) オブジェクトのequalsメソッドが であるか かを する.
2.1:2つのオブジェクトのequalsメソッドが なり、この2つのオブジェクトは しくないと しました.
2.2:2つのオブジェクトのequalsメソッドは じで、 を して、この2つのオブジェクトは しいです!
コードのデモ:
import java.util.HashSet;
// A equals()      true,   equals()
class A{
public boolean equals(Object o){
System.out.println("=====A euqals()======");
return true;
}
}
// B hashCode()    1,   hashCode()
class B{
public int hashCode(){
System.out.println("=======B hashCode()========");
return 1;
}
}
//  euqals() hashCode()
class C{
public int hashCode(){
System.out.println("=======C hashCode()========");
return 2;
}
public boolean equals(Object o){
System.out.println("=====C equals()======");
return true;
}
}
//  
public class HashSetTest{
public static void main(String[] args){
HashSet books = new HashSet();
/*A    equals(),     A ,  :A        [A@15db9742, A@6d06d69c],     equals()  .      hashCode(),     ,          
   : : HashSetTest.java              。*/
books.add(new A());
books.add(new A());
//B    hashCode(),     B ,  :B        [B@1, B@1],   : : HashSetTest.java              。
books.add(new B());
books.add(new B());
//C   euqals() hashCode(),     C ,          [C@2], : HashSetTest.java              。
C c1 = new C();//      ,   hashCode()
C c2 = new C();
books.add(c1);
books.add(c2);
System.out.println(books);
}
}
  :[-----------OUTPUT-----------  
=======B hashCode()========//  B     
=======B hashCode()========//     B     
=======C hashCode()========//     C     
=======C hashCode()========//     C     
=====C equals()======//     C     
=======B hashCode()========//     B ,  hashCode()
=======B hashCode()========//     B ,  hashCode()
=======C hashCode()========//  C ,  hashCode()
[B@1, B@1, C@2, A@15db9742, A@6d06d69c]]

.Collectionのまとめ:
Collection:
|-Listは する を することができ、 ある( アクセス )
|- ArrayList
|- LinkedList
|-Setは する を することができず、 な( アクセス )
|- HashSet
|- LinkedHashSet
Collectionメソッド:
boolean add(Object) したオブジェクトを のコレクションに
void clear()コレクション のすべての をクリア
boolean remove(Object o) したオブジェクトを のセットから
boolean contains(Object o)は、 のセットに のオブジェクトが まれているか かを する
boolean isEmpty() のコレクションが かどうかを
の を るIterator iterator()
int size()は、コレクション の の を します.
Object[]toArray()コレクション の を に する
Iterator:
Object next()は の の を します
boolean hasNext() が できる はtrueを します.
リストとセットの いは?
List:
これは された です( の と の は じです).
する を できます
Set:
な です(エレメントの と の が なる があります)
する を できません
Listコレクションにおける のメソッド
void add(int index,Object element) した をその の した に
Object get(int index)は、 の された の を します.
Object remove(int index)リストで した の を し、 された を します.
Object set(int index,Object element)コレクション の した の を した で き え、 の の を します
ArrayList:
のデータ は で、クエリーが く、 が い.
スレッドは ではなく、 が い
LinkedList:
データ はチェーンテーブルで、クエリーが く、 が い.
スレッドは ではなく、 が い
:データを するデータ
フォーマット:
はクラス、インタフェース、メソッド、 に できます.
のメリット
A:プログラムのセキュリティ
B: で した をコンパイル に
C:タイプの い の を く
for: とCollectionの の を する
:
for( データ : またはCollection ){
を します.この が です.
}
メリット:ループのシンプル
HashSet:
は できません
は、ハッシュ・テーブル です.
エレメントの と の が しない
の を するにはどうすればいいですか?hashCode()とequals()メソッドの き え
LinkedHashSet:
は できません
は、ハッシュテーブル +チェーンテーブル
の と の が する