集合总结笔记(5.0)
1.定义:数组其实就是一个集合,集合实际就是一个容器,可以容纳其它数据类型。
2.集合的数据结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h5n0DQf0-1609734927831)(D:&& Typora 代码编译工具@@@@Typora图片2\集合数据结构.png)]
3集合在java.util*/;包下。
3集合分类:Collection:单列,Map:双列,存储的是键值对。
1.Collection:
1.1 、 List接口 :可重复、有序、有下标。
实现类 #1.ArrayList:结构数组 (线性表) 查询快 增删慢 (线程不安全)
#2…Vector:数据结构为链表;查询慢 ,增删快,线程安全。
#3… LinkList:j结构是双向链表 查询慢 增删快 (线程不安全)
2.泛型集合
概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致
1.实例泛型:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FRr6jKht-1609734927832)(D:&& Typora 代码编译工具@@@@Typora图片3\泛型01.png)]
2.collection集合接口 与colletions集合工具类
//自定义类型 E=Element/E=Exception T=Type k= Key v =value
List<?> list:代表参数任意的泛型。
类似:数组工具类:Array数组与Arrays 工具类
3.Collections集合的sort()方法的使用
//对于基本数据类型和String默认实现comparable接口
List<Integer> list =new ArrayList<>();
list.add(123);
list.add(456);
list.add(789);
Collections.sort(list);//排序:对于基本数据类型和String默认实现comparable接口
for (int a: list) {
System.out.print("数组反转后为:"+a+"\t");
}
Collections.sort(list);//排序:对于基本数据类型和String默认实现comparable接口
自定义数据类型需要实现Comparable接口
//2.自定义泛型
List<Student> stus=new ArrayList<Student>();
stus.add(new Student());
stus.add(new Student());
Collections.sort(stus);
}
}
class Student implements Comparable<Student>{
@Override
public int compareTo(Student o) {
return 0;
}
方法:static静态方法:
reverse(List<?>list) //反转集合中元素顺序
shuffle(List<?> list ) //随机重置集合中元素顺序
sort() //升序排序(元素必须实现Comparable接口)
3.Set接口:特点:无序、无下标、元素不可重复。
方法全部继承于Collection方法。
实现类:1、 HashSet:结构是哈希表 无序 唯一性(通过存放的hashcode和equals保证唯一性)---------》触发equals()方法条件:两个对象的hashcode相同时;-------》2.当存入元素哈希码相同时,会调用equals进行确认,如返回true时,则拒绝后者存入。
2.Set接口下的SortedSet接口:TreeSet:结构是红黑树,可排序 基于顺序实现元素不可重复。#实现SortedSet接口,对集合元素自动排序。
元素对象的类型必须实现Comparable接口,指定顺序规则。
例子:public int compareTo(Teacher o) {
if (this.salary>o.salary){
return 1;
}else if(this.salary<o.salary){
return -1;
}
return 0;
}
-
LinkedHashSet:结构是链表和哈希表,有序唯一的,
#3.Map接口的特点:
特点:1.用于存储任意键值对(Key-----value);
2.键:无序、无下标、不允许重复。
3.值:无序、无下标、允许重复。
#1.HashMap:结构是哈希表,键是唯一无序的。线程不安全,运行效率快,允许用null,作为Key或是value.
#2.SortedMap接口下TreeMap实现类:排序的
#3.LinkHashMap:结构是链表和哈希表有序的唯一的。
5.获取长度的去别
数组:lenght()
集合获取长度 size();
5.集合总结
集合概念: | 对象的容器,存储对象,定义了对象常用的方法。 |
---|---|
List集合: | 有序、可重复、有下标《实现类:ArrayList、Vector、LinkedList》 |
Set集合: | 无序、不可重复、无下标《实现类:HashSet、LinkedHashSet、TreeSet》 |
Map集合: | 存储一对数据、无序无下标、键不能重复、值能重复《实现类:HashMap、HashTable》 |
Collections | 集合工具类,定义了除了存取以外的集合常用方法。 |
2.数组遍历的几种方式:
(for循环比例和foreach遍历的区别)
- foreach语句是for语句特殊情况下的增强版本,简化了编程提高了代码的可读性和安全性不用怕数组越界。
- 相对老的for语句来说是个很好的补充,提倡能用foreach的地方就不要再用for了。
- 在用到对集合或者数组索引的情况下foreach显得力不从心这个时候是用for语句的时候了, foreach一般结合泛型使用.
@1.遍历一维数组
//1.数组遍历方式一:
for (int i = 0; i < arr.length; i++) {
System.out.print(“该数组为:”+arr[i]+"\t");
}
//2.数组遍历方式二:
oreach的语句格式:
for(元素类型type 元素变量value :遍历对象obj){
引用x的java语句
}
for(int a: arr) {
System.out.println(“方式二遍历结果为:”+a);
}
@2.遍历二维数组:
/*情况二:二维数组遍历*/
int[][]arr1 =new int[][] {{456,463,78,46},{796,154,735,491}};
//遍历方式一:
System.out.println("该数组为:");
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
System.out.print(arr1[i][j]+"\t");
}
}
System.out.println("************************************************");
//遍历方式二:
System.out.println("逐个输出");
for(int a[]:arr1) {
for(int b:a)
System.out.printf("%-2d ",b);
System.out.println();
}
欢迎大家点赞留言!