永泰县网站集约化建设,广州好蜘蛛网站建设公司,编程代码大全,网页设计网站总结报告怎么写文章目录 集合Set集合TreeSet集合 Map集合概述特点子类及其底层数据结构常用方法遍历 数据结构常见的数据结构二叉树 可变参数介绍格式注意 Collections工具类方法 排序查找算法冒泡排序介绍原理注意代码 选择排序介绍原理规律代码 二分查找前提介绍原理注意代码 集合 Set集合 … 文章目录 集合Set集合TreeSet集合 Map集合概述特点子类及其底层数据结构常用方法遍历 数据结构常见的数据结构二叉树 可变参数介绍格式注意 Collections工具类方法 排序查找算法冒泡排序介绍原理注意代码 选择排序介绍原理规律代码 二分查找前提介绍原理注意代码 集合 Set集合 TreeSet集合
底层结构红黑树结构存储的元素会按照规则进行排序
在TreeSet集合中存储StringIntegerDoubleCharacter //JDK提供的类型 都默认实现了java.lang.Comparable接口(自带自然排序规则) 在TerrSet集合中存储自定义类型 //程序员自己定义的 就必须保证自定义类型要实现Comparable接口并重写compareTo方法如果自定义类型没有实现Comparable接口在遍历set集合时会发生异常 compareTo方法
//比较大小 0 相同 负数表示小 整数表示大
public int compareTo(E e){//自然排序规程//返回结果有三种0负数正数(底层红黑树需要)
}排序规则
自然排序元素需要实现Comparable接口比较器排序元素不需要实现Comparable接口需要在创建TreeSet对象时指定排序规则
构造方法
public TreeSet() //默认使用自然排序
public TreeSet(Comparator c) //指定比较器对象比较器Comparator接口(泛型接口)int compare(Object o1,Object o2) //比较俩个元素的大小: 0正数负数o1要存储的元素o2已存在的元素
Map集合 概述
是一个存储成对数据的集合称之为双列集合。Collection称之为单列集合存储的数据称之为键值对(Entry)底层keyvalue存在
特点
可以存储2个元素(键值对元素)key元素不能重复value元素可以重复一个key元素只能对应一个value元素(一一对应)能通过key找到value存储元素不保证顺序没有索引
子类及其底层数据结构
java.util.Map(接口)
HashMap:底层使用哈希表LinkedHashMap:底层使用哈希表链表TreeMap:底层使用红黑树
HashSet底层实现就是HashMap的键值完成的同理其他俩个也是
常用方法
添加和修改都是put修改需要在键的位置写上进行修改的键值即可
遍历
不能直接遍历只能间接性实现遍历操作
键找值方式 获取Map集合中所有的key元素遍历所有的key通过key元素找到对应的value元素
Map对象.keySet();
键值对对象 获取Map集合中所有的Map.Entry对象遍历所有的Entry对象通过Entry中的API获取keyvalue
Map对象.entrySet();键要唯一所有键的存储对象为自定义对象时要重写hashCode和equals方法TreeMap参考TreeSet
数据结构 常见的数据结构 二叉树 二叉查找树
规则小的存左边大的存右边一样的不存平衡二叉树红黑树平衡二叉B树
可变参数 介绍
在调用方法是传入任意个参数底层是使用数组
格式
public 返回值类型 方法名(参数类型... 参数名){//...就是可变参数的语法表示格式
}注意
可变参数只能作为方法的最后一个参数前面可以有也可以没有参数可变参数本质上是数组不能作为方法的重载。(一个方法参数为可变参数有一个相同方法参数为参数名相同的数组)
Collections工具类
不能创建对象提供了静态方法针对List,Set集合进行相关操作(排序二分查找添加元素…)
方法
static T boolean addAll(CollectionT c, T... elements)
//添加任意多个数据到集合中排序查找算法 冒泡排序 介绍
将一组数据按照升序规则进行排序
原理
相邻的数据俩俩比较大的放后面
注意
如果有n个数据进行排序总共需要比较n-1轮每一次比较完毕下一次的比较就会少一个数据参与
代码
int[] arr {5,3,2,6,1};//数组中有n个元素进行n-1轮排序for (int i 0; i arr.length - 1; i) {//第一轮32516//第二轮23156//第三轮21356//第四轮12356for (int j 0; j arr.length - 1 - i; j) {if (arr[j] arr[j 1]){int tmp arr[j];arr[j] arr[j 1];arr[j 1] tmp;}}}System.out.println(Arrays.toString(arr));选择排序 介绍
将一组数据进行升序或降序排序
原理
每一次从待排序的数据元素中选出最小的一个元素存放在序列的起始位置然后再从剩余未排序元素中继续寻找最小元素然后放到已排序序列的末尾。以此类推直到全部待排序的数据元素排完。
规律
有n个元素就要比较n-1轮每一轮中都会选出一个最值元素较前一趟少比较一次
代码
//升序
int[] arr {5,8,3,6,1};for (int i 0; i arr.length - 1; i) {for (int j i 1; j arr.length; j) {if (arr[i] arr[j]){int tmp arr[i];arr[i] arr[j];arr[j] tmp;}}}System.out.println(Arrays.toString(arr));
//降序的话只需改成arr[i] arr[j]即可二分查找 前提
数组中的元素需要有序
介绍
也叫折半查找是在一组有序(升序/降序)的数据中查找一个元素它是一种效率较高的查找方法
原理
将目标元素与查找氛围的中间值作比较将目标元素分到较大/较小的一组重复上诉步骤知道目标元素中间值
注意
查找的过程中minmax作为循环的条件当minmax时循环结束查找元素不存在利用mid(minmax)/2索引来确定中间值 如果目标数中间值说明在右边minmid1如果目标数中间值说明在左边maxmid-1
代码 public static void main(String[] args) {int[] arr {2,4,6,8,9,11,15,36,59};int msg binarySearch(arr,1);if (msg 0){System.out.println(目标数不存在);}else {System.out.println(目标数存在索引为 msg);}}public static int binarySearch(int[] arr,int key){int min 0;int max arr.length - 1;while (min max){int mid (min max) / 2;if (key arr[mid]){return mid;}else if (key arr[mid]){min mid 1;}else {max mid -1;}}return -1;}