Java学习_20220615
2022/6/16 1:21:23
本文主要是介绍Java学习_20220615,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java集合框架
1. Map集合
将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值。
Map<String,String> map = new HashMap<>(); //添加 map.put("CN","中国"); map.put("UK","英国"); map.put("USA","美国"); System.out.println(map.toString());//{USA=美国, UK=英国, CN=中国} map.put("CN","Zhongguo");//键相同会将值改变 System.out.println("个数:"+map.size()); System.out.println(map.toString());//{USA=美国, UK=英国, CN=Zhongguo} //删除:只能按照键进行删除 map.remove("USA");//map.remove("美国"); System.out.println("个数:"+map.size()); System.out.println(map.toString()); //使用keyset()遍历,取出map中的key,调用map.get(key)获取值 Set<String> keyset = map.keySet(); //keyset是所有的键的集合 for (String key : keyset ) { //map.get(key)可以把当前key的值取出来 System.out.println(key+"----"+map.get(key)); } //使用Map.Entry<>是映射对,直接获取到key和value,效率更高 Set<Map.Entry<String, String>> entries = map.entrySet(); for(Map.Entry<String, String> entry : entries){//写成一句:for(Map.Entry<String, String> entry : map.entrySet()) System.out.println(entry.getKey()+"---"+entry.getValue()); } //判断 System.out.println(map.containsKey("CN")); System.out.println(map.containsValue("英国"));
Map的实现类
(1)HashMap(),线程不安全,运行效率快,允许用null作为key或者value. 构造一个具有默认初始容量(16)和默认加载因子(0.75)的空HashMap。
//Student类中成员有name和sno,构造函数,Get和Set访问器, //重写了equals和hashcode函数,保证在键相同且值相同的情况下,不能插入到HashMap中 //在键相同值不同的情况下,改变HashMap中对应键的值。 //创建集合 HashMap<Student, String> stu = new HashMap<>(); //添加元素 Student s1 = new Student("张三", 2022001); Student s2 = new Student("李四", 2022002); Student s3 = new Student("王五", 2022003); stu.put(s1,"北京"); stu.put(s2,"上海"); stu.put(s3,"杭州"); stu.put(new Student("王五", 2022003),"nanjin"); System.out.println(stu.toString()); //遍历 Set<Student> set = stu.keySet(); for(Student key : set){ for(Student key : stu.keySet()){ System.out.println(key.toString()+"---"+stu.get(key)); } //Set<Map.Entry<Student, String>> entries = stu.entrySet(); //for(Map.Entry<Student, String> en :entries){ for(Map.Entry<Student, String> en :stu.entrySet()){ System.out.println(en.getKey()+"===="+en.getValue()); }
HashMap总结
- HashMap刚创建的时候,table是null,为了节省空间,当添加第一个元素时,table容量调整为16;
- 当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容后大小为原来的2倍,目的是减少调整元素的个数。
- jdk1.8 当每个链表的长度大于8,并且数组元素个数大于等于64时,会调整为红黑树,目的时提高执行效率;
- jdk1.8 当链表长度小于6时,调整成链表;
- jdk1.8以前,链表时头插入,jdk1.8后是尾插入。
new HashSet 是实际上是实例化了一个HashMap,存储时用的是HashMap的key来保存数据。
(2)TreeMap
TreeMap<Object, Object> tree = new TreeMap<>();
使用put出错,必须实现Comparable接口重写compareTo类
public class Student implements Comparable<Student>{ @Override public int compareTo(Student o) { int n1 = this.name.compareTo(o.getName()); int n2 = this.sno-o.getSno(); return n2 == 0?n1:n2; } }
new TreeSet == new TreeMap
2. Collections工具类
添加集合
List<Integer> list = new ArrayList<>(); list.add(10); list.add(20); list.add(4); list.add(3); list.add(90); System.out.println(list.toString());//[10, 20, 4, 3, 90]
集合中的元素排序 sort
Collections.sort(list); System.out.println(list);//[3, 4, 10, 20, 90]
查找集合中元素的位置
//binarySearch 二分查找 int i = Collections.binarySearch(list, 10); int y = Collections.binarySearch(list, 111111); System.out.println(i);//2 System.out.println(y);//-6
复制copy()
//copy复制 List<Integer> dest = new ArrayList<>(); for(int x =0;x<list.size();x++){ dest.add(0); } Collections.copy(dest,list); //直接复制大小不一,数组未添加元素时大小为0 System.out.println("dest:"+dest.toString());//dest:[3, 4, 10, 20, 90]
数组反转reserve()
Collections.reverse(dest); System.out.println("dest:"+dest.toString());//dest:[90, 20, 10, 4, 3]
数组打乱shuffle()
Collections.shuffle(dest); System.out.println("dest:"+dest.toString());//每次调用,排序都不一样
List转成数组 toArray()
//list转成数组 new Integer[0]数字<=list的长度,数组为原list,[3, 4, 10, 20, 90] // 若大于(如10),用null填充 // [3, 4, 10, 20, 90, null, null, null, null, null] Integer[] arr = list.toArray(new Integer[3]); System.out.println(Arrays.toString(arr));//[3, 4, 10, 20, 90]
数组转成集合
//数组变为集合(受限集合,不能添加和删除) String[] name = {"中国","韩国","泰国","英国"}; List<String> listname = Arrays.asList(name); System.out.println(listname);//[中国, 韩国, 泰国, 英国] //把基本类型数组转成集合时,需要修改为包装类 Integer[] nums = {100,3,24,555,63}; List<Integer> listnum = Arrays.asList(nums); System.out.println(listnum);//[100, 3, 24, 555, 63]
IO框架
1. 流
内存与存储设备之间传输数据的通道。
按方向划分流:
- 输入流:将<存储设备>中的内容读如到<内存>中。
- 输出流:将<内存>中的内容写入到<存储设备>中。
按单位划分流:
- 字节流:以字节为单位,可以读写所有数据;
- 字符流:以字符为单位,只能读写文本数据。
按功能划分流:
- 节点流:具有实际传输数据的读写功能;
- 过滤流:在节点流的基础之上增强功能。
(1)字节流
父类(抽象类):
InputStream:字节输入流(read())
OutputStream:字节输出流(write())
实现类:
FileInputStream
FileOutputStream
这篇关于Java学习_20220615的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略