java数据结构
数组
是一个存放多个数据的容器
数据是同一种类型
所有的数据是线性规则排序
可以通过位置索引来快速定位访问数据
需要明确容器的长度
int[] a = new int[5]{};
JCF(java collection framework)
容器:能够存放数据的空间结构
容器框架:有一些容器,并且在这些容器上有算法实现,提高数据存储效率,避免程序员的重复劳动。
主要分为三大类:列表List、散列集合Set 以及映射Map
JCF的集合接口是Collection
collection下的方法:
add();//增加元素
contains();//包含
remove();//删除
size();//数据元素个数
iterator迭代器下的方法:
-hasNext
-next
-remove
List列表
-有序的collection
-允许有重复的元素
主要实现:ArrayList、LinkedList、Vector
ArrayList特性
以数组实现的列表,不支持同步
利用索引位置可以快速访问定位
不适合指定位置的插入删除操作
适合变动不大,主要用于查询数据
和Java数组相比,其容量是可以动态调整的
ArrayList在元素填满容器时会自动扩充容器大小的50%
在对ArrayList遍历的时候推荐使用for-each遍历
LinkedList特性
以双向链表实现的列表,不支持同步
可被当成堆栈、队列、和双端队列进行操作
顺序访问高效,随机访问较差,中间插入和删除高效
适用于经常变化的数据
LinkedList<Integer> l1 = new LinkedList<Integer>();
l1.add(3);
l1.add(2);
l1.add(5);
l1.add(30);
l1.add(31);
System.out.println(l1.size());
l1.addFirst(5);
l1.addLast(0);
l1.remove(1);
Iterator<Integer> iterator = l1.iterator();
while(iterator.hasNext()){
iterator.next();
}
for (Integer integer : l1) {
System.out.println(integer);
}
Vector
和ArrayList类似,可变数组实现的列表
同步,适合在多线程下使用
Set集合
确定性:对任意一个对象都能判定是否属于某一集合
互异性:集合内每个元素都是不同的
无序性:集合内的顺序无关
HashSet
基于散列函数的集合,无序,不支持同步
内部时基于HashMap实现的,可以容纳NULL元素
LinkedHashSet
继承自HashSet 也是基于HashMap实现的,可容纳null元素
基于散列函数和双向链表的集合,可排序的,不支持同步
方法跟HashSet基本一致
HashSet与LinkedHashSet判定元素重复的原则:
1.首先判定两个元素的hashCode返回值是否相同,若不同,返回false
2.若两者的hashCode相同,判定equals方法,若不同,返回false,否则返回true
TreeSet
基于树结构的集合,可排序,不支持同步,不可容纳null元素
按照所存储对象大小升序输出
添加到TreeSet的元素必须实现Comparable接口,而实现Comparable接口必须实现compareTo方法
TreeSet判定规则是根据compareTo返回值来确定的,
Map映射
数学定义:两个集合之间的元素对应关系。
一个输入对应一个输出。
HashMap
不支持同步,速度快,适合数据量大
k-v对,k与v都允许为空
主要方法:与Hashtable大致一样
遍历:通过迭代器遍历
HashMap<Integer,String> hm = new HashMap<>();
hm.put(1,"hi");
Integer key;
String value;
Iterator<Integer> iter = hm.keySet().iterator();
while(iter.hasNext()){
key = iter.next();
value = hm.get(key);
System.out.println(key+value);
}
Hashtable
同步,慢,数据量小,线程安全的,无序的
k-v对 K和V都不允许为null
主要方法:
Properties
同步,文件形式,数据量小
继承自Hashtable,唯一一个将KV对保存在文件当中
主要方法:
LinkedHashMap
基于双向链表的维持插入顺序的HashMap
HashMap的遍历时无序的
LinkedHashMap遍历的顺序和它插入的顺序保持一致
TreeMap遍历的顺序时按照大小或者compareTo方法规定的
TreeMap
基于红黑树的Map,可以根据Key的自然排序或者compareTo方法进行排序输出
数据结构类的工具类
不存储数据,而是在数据容器上,实现高效操作
主要是排序与搜索
Arrays
处理对象是数组
排序:对数组排序,sort/parallelSort
查找:从数组中查找一个元素,binarySearch(二分法查找)
批量拷贝:从原数组批量复制元素到目标数组,copyOf
批量赋值:不用再写for循环,fill
等价比较:判断两个数组内容是否一样,equals
Collections
排序:对List排序,sort
查找:从List中查找一个元素,binarySearch(二分法查找)
批量赋值:fill
最大最小:查找集合中最大/最小值 max,min
反序:将List反序排列 reverse
对象比较
对象实现Comparable接口:
实现compareTo方法:
">"返回1,==返回0,<返回-1;
赋值:不用再写for循环,fill
等价比较:判断两个数组内容是否一样,equals
Collections
排序:对List排序,sort
查找:从List中查找一个元素,binarySearch(二分法查找)
批量赋值:fill
最大最小:查找集合中最大/最小值 max,min
反序:将List反序排列 reverse
对象比较
对象实现Comparable接口:
实现compareTo方法:
">"返回1,==返回0,<返回-1;