2.数据结构(了解)

2.1 树形结构

二叉树: 任意一个节点最多有2个子节点的树形结构,就称之为"二叉树".
二叉查找树: 任意一个节点的左子节点比自己小,右子节点比自己大,的二叉树,被称之为"二叉查找树".也叫"二叉搜索树,二叉排序树"
平衡二叉树: 任意节点的左右子树的高度差不能超过1.
红黑树: 红黑树是遵守自己的"红黑规则"的二叉查找树. TreeSet的底层就是"红黑树".

2.2 哈希表

概述: 相当于新华字典,由"目录"和"数据"共同组成.
注意:
JDK7之前: Hash表 = 数组 + 链表;
JDK8之后: Hash表 = 数组 + 链表 + 红黑树; 链表长度>8时,会自动变为红黑树

 

 

3.Map<K,V>

3.1 基本概述

概述: Map集合是双列集合. 所谓的双列集合,就是,存和取的时候,必须一对一对的操作.
注意:
1.泛型中,K表示键的类型,V表示值的类型.
2.Map中的键,无序,且不可以重复. Map中的值不做要求.
3.Map中的键和值必须一一对应.
4.键+值,称之为一个键值对,也可以叫做Entry对象.

3.2 成员方法

基本方法:
public void put(键, 值); //添加/覆盖. 如果键不存在就是添加,如果键存在就是覆盖.
   public remove(键); //根据键删除"键值对",把值返回.  
   public void clear(); //清空整个集合
   public boolean containsKey(键); //判断集合中是否包含指定的"键"
   public boolean containsValue(值);//判断集合中是否包含指定的"值"
   public boolean isEmpty(); //判断是否为空
   public int size(); //获取集合元素个数(键值对的对数)
获取方法:
public get(键);   //根据键获取值.
   public Set<K> keySet(); //获取所有的"键"
   public Set<Map.Entry<K,V>> entrySet(); //根据所有的"键值对"

3.3 集合遍历

① 根据键获取值
Map<String, String> map = new HashMap<>();
map.put("1号丈夫", "1号妻子");
map.put("2号丈夫", "2号妻子");
map.put("3号丈夫", "3号妻子");
map.put("4号丈夫", "4号妻子");
map.put("5号丈夫", "5号妻子");

//1.获取到所有的键
Set<String> keys = map.keySet();
//2.遍历Set集合得到每一个键
for (String key : keys) {
   //3.通过每一个键key,来获取到对应的值
   String value = map.get(key);
   System.out.println(key + "---" + value);
}
② 键值对获取键和值
Map<String, String> map = new HashMap<>();
map.put("1号丈夫", "1号妻子");
map.put("2号丈夫", "2号妻子");
map.put("3号丈夫", "3号妻子");
map.put("4号丈夫", "4号妻子");
map.put("5号丈夫", "5号妻子");

//1.首先要获取到所有的键值对对象。
Set<Map.Entry<String, String>> entries = map.entrySet();
//2.遍历,得到每一个键值对对象
for (Map.Entry<String, String> entry : entries) {
  //3.从每个键值对对象获取"键"和"值"
   String key = entry.getKey();
   String value = entry.getValue();
   System.out.println(key + "---" + value);
}

3.4 Map子类

HashMap: HashMap的键就是"HashSet",所以HashMap的键要求"重写HashCode和equals方法"
TreeMap: TreeMap的键就是"TreeSet",所以TreeMap的键要求"元素 "
 

 

1.集合补充

1.1 可变参数

概述: 可变参数,其实就是一种特殊的参数. 可变参数本质上是一个数组
格式:
public void 方法名(数据类型... 参数名){

}
注意:
1.可变参数本质上就是一个数组
   2.如果方法的参数有多个,则可变参数必须放在最后.
   3.方法最多只能有一个可变参数.
   4.可变参数的"实参",可以给1个,可以给多个,也可以没有,还可以直接是一个数组.

1.2 数组转集合

① 概述
语法:
//JDK8之前
List<T> list = Arrays.asList(T... arr);
//JDK9之后
List<T> list = List.of(T... arr);
Set<T> set = Set.of(T... arr);
注意:
1.不论是JDK8之前,还是JDK9之后.转换后的集合,都不允许"增删改".
   2.如果非要"增删",则可以把"不可变集合"作为构造方法的参数,重新创建集合,新集合就可以"增删改"
   3.转换时,要求数组必须是引用数据类型的数组.
② 案例
public class TestDemo {
   public static void main(String[] args) {
       //1.准备数组
       String[] arr = {"aaa", "bbb", "ccc"};

       //2.数组转换为集合
       List<String> jdk8List = Arrays.asList(arr);

       //3.把"不可变集合"作为构造方法参数,重新创建集合(新集合就可以"增删改"了)
       ArrayList<String> newList = new ArrayList<>(jdk8List);
       System.out.println(newList);
       newList.add("ddd");
       System.out.println(newList);
       
       
       //另外: 该操作可以快速创建集合,并在集合中添加数据
       //ArrayList<String> list = new ArrayList<>(List.of("aaa","bbb","ccc"));
  }
}
 

 

posted on 2022-10-24 11:50  神奇的阿久  阅读(56)  评论(0)    收藏  举报