데이터 구조의 지식
1. 데이터 구조 사용은 무엇입니까?
데이터 구조의 합리적인 사용, 당신은 더 쉽게 저장된 데이터를 찾을 수 있습니다.
2. 일반적인 데이터 구조
일반적인 데이터 저장 구조 : 스택, 큐, 배열, 연결리스트, 그리고 레드 - 블랙 트리.
- 스택 : 선형 연산 테이블에 의해 제한된다 스택 (스택) 만의 테이블 (스택)의 일단에 삽입 및 삭제를 허용. 입구와 출구의 마지막 아웃 스택 특징으로 스택의 상단에있다.
- 큐 : 선형 형태로 한정 스택 약어 팀 (큐)와 동작은 동일하고, 단지 테이블에 삽입 일단, 삭제의 일단을 허용한다. 는 FIFO 큐 및 입구와 반 출구 측 특징.
- 배열 : 배열, 그것은 요소의 정렬 순서입니다. 어레이는 메모리 및 저장 소자에 인접한 개방 공간이다. 요소 특성 찾기 (배열 인덱스로, 빠르게 요소를 찾을 수 있습니다) (각 요소는 새로운 배열을 생성에 추가 및 삭제), 추가 또는 요소를 느린 삭제 빠릅니다.
- 목록 : 연결리스트, 노드 구성, 노드가 실행시에 동적으로 생성 된 노드 집합 (목록의 각 요소는 노드라고합니다). 데이터 및 노드를 저장하는 다음 필드 데이터를 가리키는 포인터 필드 : 각 노드는 두 부분으로 구성된다. 기능을 찾기 느린 (만 되돌아 노드를 통해 볼), 추가 또는 삭제 요소 빠른 (그냥 편집 링크 다음 노드의 메모리 주소 수 있습니다.)
- 레드 - 블랙 트리 : 그것은 이진 트리에 속한다. 이진 트리, 이진 트리 각 노드는 주문 나무의 아무 이상이 없습니다. 레드 - 블랙 트리의 특성 루트 노드는 검은 색이다, 검은 잎 노드는 각 노드의 자식 노드는 블랙, 레드, 각각 검은 색 노드의 같은 리프 노드에 대한 모든 경로에있는 모든 노드입니다.
둘째, 수집
이해의 컬렉션
자바 콜렉션에 설치된 컨테이너이고, 복수의 데이터를 저장하는데 사용될 수있다.
컬렉션과 배열의 차이 :
- 고정 길이의 배열 가변 길이 설정.
- 배열 요소의 동일한 유형을 저장할 수 있습니다. 개체의 집합을 저장, 객체의 유형은 다를 수 있습니다.
1.
일련의 요소를 저장하기위한 특정 규칙을 충족 루트 인터페이스 분리 수거 클래스입니다.
그것은 각각 두 가지 중요한 하위 인터페이스를 가지고, java.util.List
그리고 java.util.Set
.
List
질서 요소 특징, 요소는 반복 될 수있다.Set
이 질환은 소자 및 반복되지 특징으로한다.
일반적인 방법의 개별 집합 | 기능 |
공공 부울 추가 기능 (E 전자) | 컬렉션에 지정된 개체를 추가합니다 |
공공 무효 명확 () | 컬렉션의 모든 요소를 빈 |
공공 부울 삭제 (E 전자) | 현재의 컬렉션에 지정된 개체를 삭제 |
공공 부울 포함 (E 전자) | 컬렉션의 현재 개체가 지정된 포함되어 있는지 여부를 확인합니다 |
공공 부울 IsEmpty 함수 () | 세트가 비어 있는지 여부 결정 |
공공 INT 크기 () | 세트의 요소의 수를 돌려줍니다 |
공용 개체 [] toArray () | 컬렉션 배열로 변환 |
1.1 목록 모음
목록 인터페이스 일반적인 방법 | 기능 |
공공 무효 추가 기능 (INT 지수, E 요소) | 세트의 지정된 위치에 지정된 요소 |
공공 E get 및 (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); } } }
温馨提示
- 如果您对本文有疑问,请在评论部分留言,我会在最短时间回复。
- 如果本文帮助了您,也请评论关注,作为对我的一份鼓励。
- 如果您感觉我写的有问题,也请批评指正,我会尽量修改。