本篇博客主要是对于学的网课的总结。课程是华东师范大学的陈良育老师的Java核心技术。因为想加深一下印象和方便查阅,所以写下这个博客。
首先从数组写起。
数组是存放多个数据的容器。
特点如下:
1.数据是同一种类型
2.所有的数据是线性排列
3.可以通过索引来快速定位访问数据
4.需要明确容器长度
初始化:
//第一种
int a[];
//第二种
int[] a;
//第三种
int[] c = new int[2];
//第四种
int[] d = new int[]{0,2,4};
//第五种
int[] e = {1,2,3};
遍历方法:
//for循环遍历
int a[] = {1,2,3,4,5}
for(int i = 0 ; i < a.length; i++){
System.out.println(a[i]);
}
//iterator 遍历
for(int b : a){
System.out.println(b);
}
int[][] a = {{1,2},{3,4}};
//iterator遍历多位数组,比如二维数组
for(int[] items : a){//把二维数组看做每个元素都是一维数组的一维数组
for(int item : items){
System.out.println(item);
}
}
几个相关的概念和介绍
1.容器:能够存放数据的空间结构。比如线性的有数组等非线性的有列表,散列集,树等
2.容器框架:为表示和操作容器而规定的一种标准体系结构。
①:对外的接口:容器内所能存放的数据类型。
②:接口的实现:可复用的数据结构
③:算法:对数据的查找和排序。
容器框架的优点:提高数据的存储效率,避免程序员重复劳动。
下面是集合框架的结构示意图:
JCF的集合是Collection.主要的常用方法有
1.add():添加元素。
2.contain():集合中是否包含此元素。
3.remove():删除该元素。
4.size():数据元素的个数。
iteartor:迭代器
JCF的迭代器接口Iterator:
1.hasNext():是否含有下一个元素.
2.next():获取下一个元素.
3.remove():删除元素.
JCF的主要实现类:
1.列表: List,ArrayList,LinkedList
2.集合:Set,HashSet,TreeSet,LinkedHashSet
3.映射:Map,HashMap,TreeMap,LinkedHashMap
JCF的算法类:
Arrays:对数组进行查找排序等操作
Collections:对collection及其子类进行排序等操作
一.列表(List)
特点:
1.有序的Collection
2.允许重复元素
3.允许嵌套,例如{1,2,{1,2},1,3};
1.ArrayList
1.以数组实现列表,不支持同步
2.利用索引位置可以快速访问
3.不适合做指定位置的插入删除操作
4.适合用于变动不大,主要用于查询的数据
5.和Java数组相比,其容量是可以动态调整的
6.ArrayList在元素填满容器时,会自动扩张容器的50%.
7.三种遍历方式分别是Iterator迭代器遍历,根据随机索引值遍历和for循环遍历.
所用时间:for循环<Iterator迭代器<随机索引值遍历
2.LinkedList
1.以双向链表实现的列表,不支持同步
2.可被当作堆栈,队列和双端队列进行操作
3.顺序访问高效,随机访问较差,中间插入删除高效
4.适用于经常变化的数据
遍历所用时间:for循环<Iterator迭代器<<随机索引值遍历
3.Vector(同步)
1.和ArrayList类似,可变数组实现的
2.Vector同步,适合在多线程下使用
3.,性能较差
4.相较上面多了Enumeration遍历
遍历所用时间:for循环<随机索引值遍历Iterator迭代器约等于Iterator迭代器
二.集合(Set)
性质:
1.确定性:对任意对象都能判断是都属于某一个集合
2.互异性:集合内的每一个元素都是不相同的,注意是内容互异
3.无序性:集合内的与元素顺序无关
1.HashSet
1.基于HashMap实现的,可以容纳null元素,不支持同步
2.常用方法:
①:add():添加
②:size():元素个数
③:contains():包含的元素个数
④:remove():移除某个元素
⑤:clear():清空集合
3.插入顺序与遍历顺序不一定相同
2.LinkedHashSet
1.继承HashSet,也是基于HashMap实现的,可以容纳null元素
2.不支持同步
3.方法和HashSet一致
4.通过一个双向链表维护插入顺序,插入顺序与遍历顺序相同
3.TreeSet
1.基于TreeMap实现的,不可以容纳null元素,不支持同步
2.方法同上
3.根据ComparaTo()方法指定comparator排序
4.HashSet和LinkHashSet判定重复的原则
1.判断两个元素的HashCode返回值是否相同,相同返回True,不同返回false
2.若两者的hasCode相同,判定equals()方法,若相同返回true,若不同返回false
5.TreeSet判定元素重复的规则
继承Comparable接口,比较两个元素的compareTo()方法
三.映射Map
性质:
1.数学定义:两个集合之间的对应关系
2.一个输入对应一个输出
3.使用键值对,{key,value},k-v对
1.Hashtable
注意:table是小写的首字母,与山峰式的命名规则冲突
1.k-v对,k和v都不能为null
2.同步,多线程安全
3.无序,适合小数据量
4.主要方法
①.clear()
②.contains()/containsValue()
③.containsKey()
④.get():获取值
⑤.put():增加一个k-v对
⑥.remove()
⑦.size()
三种遍历方式Entry迭代器,key的Iterator遍历和key的Enumeration遍历速度相差不大
2.HashMap
1.k-v对,k和v都不允许为null
2.同步,多线程安全
3.无序
4.主要方法和Hashtable一样
3.LinkedHashMap和TreeMap
LinkedHashMap是基于双向链表维持插入顺序的HashMap.按照输入顺序进行输出.
TreeMap是基于红黑树的Map,可以根据key的自然排序或者compareTo方法进行排序输出.因此输出按照大小或compareTo方法保持一致.
4.Properties(诞生很早,唯一一个与文件相关的)
1.继承自HashMap
2.可以将k-v对保存在文件中
3.适用于数据量较小的配置文件
4.方法同上
5.从文件加载的load方法,写入文件的store方法
6.获取属性的getProperty方法和设置属性的setProperty方法
四.工具类
工具类不存储数据,而是在数据容器上实现高效操作
1.Arrays类
1.排序,对数组排序sort()/parallelSort()
2.查找:从数组中查找一个元素,binarySearch()
3.批量拷贝:从原数组中批量复制元素到目标数组copyOf()
4.批量赋值:对数组进行批量赋值,fill()
5.等价性比较:判断两个数组是否相同,equals()
2.Collections
处理的对象是collection及其子类
1.排序:对List进行排序,sort()
2.查找:从数组中查找一个元素,binarySearch()
3.批量赋值:对数组进行批量赋值,fill()
4.最大最小值:max()/min()
5.反序:将List反序排列,reverse