学习目标
- 排序查找算法
- 选择排序
- 二分查找
- Map集合
- Map集合的特点
- Map集合的特点及实现类
- Map集合的遍历方式
- 集合嵌套
- 单列集合嵌套单列集合
- 单列集合嵌套双列集合
- 双列集合嵌套双列集合
- 集合案例-斗地
1. ★ Map集合
1.1 什么时使用双列集合 ?
每个元素都有键与值两部分组成,记录的是键值对对应关系,即通过键可以找到值时使用双列集合。(键必须唯一,值可以重复)1.2 HashMap集合特点及使用 ?
- 特点:
- HashMap底层是哈希表结构的;
- 依赖hashCode方法和equals方法保证键的唯一;
- 如果键存储的是自定义对象,需要重写hashCode和equals方法。
- JDK1.8前后变化
- JDK1.8前:哈希表由数组+链表组成;头插法。
- JDK1.8后:节点个数少于等于8个,数组+链表 组成;节点数多于8个,数组+红黑树组成;尾插法。
使用
HashMap<Student, String> hm = new HashMap<>();hm.put(new Student("迪丽热巴", 18) , "新疆");hm.put(new Student("迪丽热巴", 18) , "中国");Set<Student> set = hm.keySet();for (Student key : set) {String value = hm.get(key);System.out.println(key + "--" + value);}
1.3 双列集合遍历方式及区别 ?
第一种遍历方式
- 获取所有键的集合 keySet();
- 遍历键的集合;
- 通过键,来获取对应值。
- 第二种遍历方式
- 单列集合(单个的存:姓名) : Collection接口
- List接口 : 1 有序 2 索引 3 元素可以重复
- ArrayList类 : 数据结构(数组结构) 查询快,增删慢,线程不安全。
- LinkedList类 : 数据结构(链表结构) 查询慢,增删快
- Set 接口 : 1 无序 2 无索引 3 元素唯一
- HashSet类 : 数据结构(哈希表) 查询快,保证元素唯一
- LinkedHashSet类 : 数据结构(链表+哈希表) 查询快,保证元素唯一,有序
- TreeSet类 : 数据结构(红黑树) 查询快,可以对元素进行排序
- 双列集合(两个两个的存:姓名、年龄) :
- Map接口
冒泡排序( 将一组数据按照从小到大的顺序进行排序)
原理 : 相邻元素两两作比较 , 大的元素往后放。使用:
int [] arr={3,5,3,2,4};//外循环 控制的轮次//length-1:为了防止索引越界for (int j = 1; j <arr.length-1 ; j++) {//每轮比较for (int i = 0; i < arr.length-j; i++) {if (arr[i]>arr[i+1]){int temp=arr[i];arr[i]=arr[i+1];arr[i+1]=temp;}}}
选择排序( 将一组数据按照从小到大的顺序进行排序)
原理:每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。int [] arr={3,5,3,2,4};//length-1:最后一趟可省略for (int i = 0; i < arr.length-1; i++) {//定义变量记录当前排序中最小元素的索引int index=i;//遍历当前元素到数组末尾for (int j = i+1; j < arr.length; j++) {if (arr[j]<arr[index]){index=j;}}//元素交换位置if (i!=index){int temp=arr[i];arr[i]=arr[index];arr[index]=temp;}}
二分查找(须是有序列表)
原理:比较一个元素与数列中的**中间位**置的元素的大小,如果比中间位置的元素**大**,则继续在**后半部分**的数列中进行二分查找;如果比中间位置的元素**小**,则在数列的**前半部分**进行比较;如果**相等**,则找到了元素的位置。
int min=0;int max=arr.length-1;while (min<=max){int mid=(min+max)/2;//判断的中间索引对应的元素是否是要查找的元素if (arr[mid]==num){return mid;}else if(arr[mid]>num){max=mid-1;}else if(arr[mid]<num){max=mid+1;}}//min>max:num在数组arr中不存在return -1;
3.TreeSet集合
3.1特点
底层红黑树,可以对元素进行排序。
-
3.2排序方式
自然排序:Comparable 接口
- 比较器排序:Comparator接口
