자바 기초 연구 노트 (육) - 데이터 구조 및 컬렉션

데이터 구조의 지식

1. 데이터 구조 사용은 무엇입니까?

 데이터 구조의 합리적인 사용, 당신은 더 쉽게 저장된 데이터를 찾을 수 있습니다.

2. 일반적인 데이터 구조

일반적인 데이터 저장 구조 : 스택, 큐, 배열, 연결리스트, 그리고 레드 - 블랙 트리.

  • 스택 : 선형 연산 테이블에 의해 제한된다 스택 (스택) 만의 테이블 (스택)의 일단에 삽입 및 삭제를 허용. 입구와 출구의 마지막 아웃 스택 특징으로 스택의 상단에있다.
  • 큐 : 선형 형태로 한정 스택 약어 팀 (큐)와 동작은 동일하고, 단지 테이블에 삽입 일단, 삭제의 일단을 허용한다. 는 FIFO 큐 및 입구와 반 출구 측 특징.
  • 배열 : 배열, 그것은 요소의 정렬 순서입니다. 어레이는 메모리 및 저장 소자에 인접한 개방 공간이다. 요소 특성 찾기 (배열 인덱스로, 빠르게 요소를 찾을 수 있습니다) (각 요소는 새로운 배열을 생성에 추가 및 삭제), 추가 또는 요소를 느린 삭제 빠릅니다.
  • 목록 : 연결리스트, 노드 구성, 노드가 실행시에 동적으로 생성 된 노드 집합 (목록의 각 요소는 노드라고합니다). 데이터 및 노드를 저장하는 다음 필드 데이터를 가리키는 포인터 필드 : 각 노드는 두 부분으로 구성된다. 기능을 찾기 느린 (만 되돌아 노드를 통해 볼), 추가 또는 삭제 요소 빠른 (그냥 편집 링크 다음 노드의 메모리 주소 수 있습니다.)
  • 레드 - 블랙 트리 : 그것은 이진 트리에 속한다. 이진 트리, 이진 트리 각 노드는 주문 나무의 아무 이상이 없습니다. 레드 - 블랙 트리의 특성 루트 노드는 검은 색이다, 검은 잎 노드는 각 노드의 자식 노드는 블랙, 레드, 각각 검은 색 노드의 같은 리프 노드에 대한 모든 경로에있는 모든 노드입니다.

둘째, 수집

이해의 컬렉션

자바 콜렉션에 설치된 컨테이너이고, 복수의 데이터를 저장하는데 사용될 수있다.

컬렉션과 배열의 차이 :

  • 고정 길이의 배열 가변 길이 설정.
  • 배열 요소의 동일한 유형을 저장할 수 있습니다. 개체의 집합을 저장, 객체의 유형은 다를 수 있습니다.

1.  컬렉션 수집

컬렉션 은 IS 일련의 요소를 저장하기위한 특정 규칙을 충족 루트 인터페이스 분리 수거 클래스입니다.

그것은 각각 두 가지 중요한 하위 인터페이스를 가지고, 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.ArrayListjava.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 集合

java.util.ArrayList集合数据存储的结构是数组结构。(见 https://www.cnblogs.com/lyxdw/p/11649759.html 第三节)

1.12 LinkedList集合

java.util.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

 

 

 

 

 

 

 

 

 

 

 

 

 

在开发时,LinkedList集合也可以作为堆栈,队列的结构使用。(了解即可)

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存储元素有序。
  • HashSet集合存储数据的结构是哈希表,LinkedHashSet是链表和哈希表组合的一个数据存储结构。

什么是哈希表?

在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,哈希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。

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 . Collections 集合工具类

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> ) 将集合中元素按照指定规则排序

 

 

 

 

 

 

 

 

java.utils.Collections是集合工具类,用来对集合进行操作。

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;//升序
    }
}
  • Comparable:强行对实现它的每个类的对象进行整体排序。通过实现类 重写 compareTo 方法实现,直接使用Collections.sort(list)即可。
  • Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

 

3. Map集合

map 集合属于双列集合。存储的数据是多个键值对,并且键不可以重复,值可以。

 常用方法    功能
 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集合)。

 

 

 

 

 

 

 

 

 

HashMap集合

HashMap集合是无序的,存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

在HashMap下面有一个子类LinkedHashMap,它是链表和哈希表组合的一个数据存储结构。可以实现有序存取。

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 K getKey():获取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);
        }
    }
}

 

温馨提示

  • 如果您对本文有疑问,请在评论部分留言,我会在最短时间回复。
  • 如果本文帮助了您,也请评论关注,作为对我的一份鼓励。
  • 如果您感觉我写的有问题,也请批评指正,我会尽量修改。

추천

출처www.cnblogs.com/lyxdw/p/11655981.html