データ構造の知識
1.データ構造の使用は何ですか?
データ構造の合理的な使用は、あなたがより簡単に格納されたデータを見つけることができます。
2.一般的なデータ構造
一般的なデータ記憶構造:スタック、キュー、配列、リンクリスト、および赤黒木。
- スタック:線形計算テーブルにより制限されるスタック(スタック)は、唯一のテーブル(スタック)の一方の端部に挿入および欠失を可能にします。入口と出口の最後のアウトスタックによって特徴付けスタックの最上部にあります。
- キュー:線形形式が制限スタックとして頭字チーム(キュー)、その動作は同じであり、唯一のテーブルに挿入され一端、削除の一端を可能にします。FIFOキューと入口半分と出口側が特徴。
- 配列:配列、それは要素の順序付けられたシーケンスです。配列は、メモリ内の記憶素子に連続したオープンスペースです。(新しい配列を作成し、各要素に追加および削除)特性の要素が速い検索(配列インデックスでは、迅速要素を見つけることができます)、低速の要素を追加または削除。
- リスト:リンクされたリスト、ノード組成、ノードは、実行時に動的に生成されたノードの集合(リスト内の各要素は、ノードと呼ばれます)。データを格納する次のデータフィールドと、ノードを指すポインタ・フィールド:各ノードは、2つの部分から構成されています。(次のノードのメモリアドレスにできるだけの編集リンク)遅い機能の検索(ノードだけに目を通す引き返す)、高速な要素を追加または削除。
- 赤黒木:それは、バイナリツリーに属します。バイナリツリー、バイナリツリーは、各ノードは、順序付けられたツリーのせいぜい2ではありません。赤黒木の特性ルートノードが黒である、ブラックリーフノードは、各ノードの子ノードは、黒、赤、各黒ノードの同一のリーフノードへのすべてのパス上にある任意のノードです。
第二に、コレクション
理解のコレクション
コレクションは、複数のデータを格納するために使用することができ、Javaで提供される容器です。
コレクションと配列の違い:
- 可変長の固定長組のアレイ。
- アレイは、要素の同じタイプを格納することができます。オブジェクトのセットを格納し、オブジェクトの種類が異なっていてもよいです。
1.
一連の要素を格納するための特定の規則を満たして、ルート・インタフェース別のコレクションクラス。
これは、それぞれ、二つの重要なサブインターフェースを有し、java.util.List
そしてjava.util.Set
。
List
整然とした要素によって特徴づけられる、要素を繰り返すことができます。Set
障害は、要素、及び反復しないことを特徴とします。
一般的な方法の別のセット | 機能 |
パブリックブールの追加(E電子) | コレクションに指定されたオブジェクトを追加します |
公共のボイドをクリア() | コレクションの要素のすべての空 |
パブリックブール削除(E電子) | 現在のコレクション内の指定したオブジェクトを削除します。 |
パブリックブール値が含まれている(E電子) | コレクション内の現在のオブジェクトが指定され含まれているかどうかを決定します |
パブリックブールのisEmpty() | セットが空であるかどうかを判断 |
公共int型のサイズ() | セット内の要素数を返します。 |
パブリックオブジェクト[]のtoArray() | コレクションの配列を変換します |
1.1リスト・コレクション
Listインタフェースの一般的な方法 | 機能 |
公共ボイド追加(int型のインデックス、E要素) | のセットに指定された場所に指定された要素 |
公共Eは、(int型のインデックス)を取得します | 位置指定された要素のコレクションを返します。 |
公共E削除(int型のインデックス) | リスト位置に指定された要素を削除し、それが取り除かれた要素を返します。 |
公共Eセット(int型のインデックス、E要素) | 位置指定された要素は、更新値の前に設定された復帰要素で指定された要素に置き換えられます。 |
List
そこにメインインターフェイスの実装クラスjava.util.ArrayList
とjava.util.LinkedList。
public class TestList { public static void main(String[] args) { // 创建List集合对象 List<String> list = new ArrayList<String>(); // 尾部添加 list.add("1"); list.add("2"); list.add("3"); // 指定位置添加 list.add(1,"没头脑"); // 删除索引位置为2的元素 System.out.println(list.remove(1)); // 修改指定位置元素 list.set(0, "5"); }
1.11 ArrayList 集合
1.12 LinkedList集合
LinkedList 方法 | 功能 |
public void addFirst(E e) | 将指定元素插入此列表的开头 |
public void addLast(E e) | 将指定元素添加到此列表的结尾 |
public E getFirst() | 返回此列表的第一个元素 |
public E getLast() | 返回此列表的最后一个元素 |
public E removeFirst() | 移除并返回此列表的第一个元素 |
public E removeLast() | 移除并返回此列表的最后一个元素 |
public E pop() | 从此列表所表示的堆栈处弹出一个元素 |
public void push(E e) | 将元素推入此列表所表示的堆栈 |
public boolean isEmpty() | 如果列表不包含元素,则返回true |
public class LinkedListDemo { public static void main(String[] args) { LinkedList<String> link = new LinkedList<String>(); //添加元素 link.addFirst("1"); link.addFirst("2"); link.addFirst("3"); System.out.println(link); // 获取元素 System.out.println(link.getFirst()); System.out.println(link.getLast()); // 删除元素 System.out.println(link.removeFirst()); System.out.println(link.removeLast()); while (!link.isEmpty()) { //判断集合是否为空 System.out.println(link.pop()); //弹出栈顶元素 } System.out.println(link); } }
1.2 set 集合
Set
接口的主要实现类有java.util.HashSet
。LinkedHashSet是HashSet子类。
区别:
HashSet存储元素无序。
LinkedHashSet
存储元素有序。-
public class TestHashSet{ public static void main(String[] args) { //创建 Set集合 HashSet<String> set = new HashSet<String>(); //添加元素 set.add(new String("1")); set.add("1"); set.add("2"); //遍历 for (String name : set) { System.out.println(name); } } }
public class TestLinkedHashSet { public static void main(String[] args) { Set<String> set = new LinkedHashSet<String>(); set.add("1"); set.add("2"); set.add("3"); set.add("4"); //迭代器 Iterator<String> it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
2 .
public static <T> boolean addAll(Collection<T> c, T... elements) | 往集合中添加一些元素 |
public static void shuffle(List<?> list) | 打乱集合顺序 |
public static <T> void sort(List<T> list) | 将集合中元素按照默认规则排序 |
public static <T> void sort(List<T> list,Comparator<? super T> ) | 将集合中元素按照指定规则排序 |
public class TestCollections { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); //添加元素 Collections.addAll(list, 1, 2, 3,4); //排序 Collections.sort(list);
} }
//Comparator
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class TestCollections { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("cbae"); list.add("abafaa"); list.add("sba"); list.add("nb"); //排序方法 按照长度排序 Collections.sort(list, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.length() - o1.length(); } }); System.out.println(list); } }
//Comparable public class TestStudent implements Comparable<Student>{ @Override public int compareTo(Student o) { return this.age-o.age;//升序 } }
- Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
3.
常用方法 | 功能 |
public V put(K key, V value) | 把指定的键与指定的值添加到Map集合中。 |
public V remove(Object key) | 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。 |
public V get(Object key) | 根据指定的键,在Map集合中获取对应的值。 |
boolean containsKey(Object key) | 判断集合中是否包含指定的键。 |
public Set<K> keySet() | 获取Map集合中所有的键,存储到Set集合中。 |
public Set<Map.Entry<K,V>> entrySet() | 获取到Map集合中所有的键值对对象的集合(Set集合)。 |
import java.util.HashMap; public class TestMap { public static void main(String[] args){ //创建HashMap HashMap<String, String> map = new HashMap<String, String>(); //添加键值对 map.put("1","张三"); map.put("2","李四"); map.put("3","张三"); //获取键对应值 System.out.println(map.get("3")); //删除键,返回删除键的值 System.out.println(map.remove("2")); } }
Map中存在两种对象,key和value,Entry(项)将键值对封装成了对象。
-
-
public V getValue()
:获取Entry对象中的值。
-
public Set<Map.Entry<K,V>> entrySet()
: 获取到Map集合中所有的键值对对象的集合(Set集合)。
遍历Map集合
import java.util.HashMap; import java.util.Map.Entry; public class TestMap { public static void main(String[] args){ //创建HashMap HashMap<String, String> map = new HashMap<String, String>(); //添加键值对 map.put("1","张三"); map.put("2","李四"); map.put("3","张三"); for (Entry<String, String> entry : map.entrySet()) { // 解析 String key = entry.getKey(); String value = entry.getValue(); System.out.println(key+"的值:"+value); } } }
温馨提示
- 如果您对本文有疑问,请在评论部分留言,我会在最短时间回复。
- 如果本文帮助了您,也请评论关注,作为对我的一份鼓励。
- 如果您感觉我写的有问题,也请批评指正,我会尽量修改。