JAVA 集合
Collection
- JAVA collection包含三大类集合接口
类 | 接口 |
---|---|
规则集 | Set 接口 |
线性表 | List 接口 |
图 | Map 接口 |
- 接口和类都定义在java.util中
Set
Set是一个接口,继承自collection,规定集合中不能包含相同元素。
HashSet
- 好处:检索速度快
- 复杂性:需要一个哈希函数给出地址(HashCode)
- 集合中的数据不会按照插入顺序存储
import java.util.*;
class testHashset{
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("London");
set.add("Paris");
set.add("New york");
set.add("San francisco");
set.add("Beijing");
set.add("New york");
System.out.println(set);
//[Beijing, New york, London, Paris, San francisco]
Iterator iterator= set.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next()+" ");
}
//Beijing New york London Paris San francisco
}
}
LinkedHashSet
- 是HashSet的子类
- 支持集合内排序
- 按元素插入序提取数据
import java.util.*;
class testLinkedHashset{
public static void main(String[] args) {
Set<String> set = new LinkedHashSet();
set.add("London");
set.add("Paris");
set.add("New york");
set.add("San francisco");
set.add("Beijing");
set.add("New york");
System.out.println(set);
// [London,Paris,New York, San Francisco,Beijing]
for (Object element:set)
System.out.print(element.toString()+" ");
//London,Paris,New York, San Francisco,Beijing
}
}
树形集
- 有序集SortedSet是Set的子接口
- 树形集TreeSet是实现SortedSet接口的一个具体类
- 元素间必须可比较
- 可以产生比较序
import java.util.*;
public class TestTreeSet{
public static void main(String[] args) {
Set<String> set = new HashSet();
set.add("London");
set.add("Paris");
set.add("New york");
set.add("San francisco");
set.add("Beijing");
set.add("New york");
System.out.println(set);
//[Beijing, New york, London, Paris, San francisco]
TreeSet<String> treeSet= new TreeSet(set);//以字母排序
System.out.println(treeSet);
//[Beijing, London, New York, Paris, San Francisco]
for (Object element:set)
System.out.print(element.toString()+" ");
//Paris Beijing London San Francisco New York
}
}
比较器接口
- 比较器comparator是个接口
- 有两个方法compare和equals
- Compare 返回值含义:
- 负值 前参小于后参
- 0 相等
- 正值 前参大于后参
List
- List接口扩展collection接口
- 支持元素重复
- 有序
- 采用下标(position)操作数据
ArrayList
- ArrayList将元素存在数组中
- 数组动态创建
- 超过数组容量时,增加数组容量
- 不能自动收缩 trimToSize()
LinkedList
- LinkedList存储元素入链表
- 便于在任意位置上插入和删除数据
- 可以从两端提取,插入和删除元素
- hasPrecious:反向打印
import java.util.*;
public class TestArrayAndLinkedList {
public static void main(String[] args) {
List<Integer> arrayList = new ArrayList();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(1);
arrayList.add(4);
arrayList.add(0, 10);
arrayList.add(3, 30);
System.out.println(arrayList);
//[10,1,2,30,3,1,4]
LinkedList<Object> linkedList = new LinkedList(arrayList);
linkedList.add(1, "red");//在0之后加一个元素,也就是在1的位置添加一个元素
linkedList.removeLast();
linkedList.addFirst("green");
// display forward
ListIterator listiterator = linkedList.listIterator();
while (listiterator.hasNext()) {
System.out.print(listiterator.next() + " ");
}
System.out.println();
// display backward
ListIterator listiterator2 = linkedList.listIterator(linkedList.size());
while (listiterator2.hasPrevious()) {
System.out.print(listiterator2.previous() +" ");
}
System.out.println();
//1 3 30 2 1 red 10 green
}
}
集合的静态方法
- 高层父类的静态方法
- 用于解决一些子类本身不能解决的问题
- 比如给HashSet中的数据排序
sort(list:List,c:Comparator):void
binarySearch(list:List,key:Object):int//二分查找
Vector,Stack,Queue,Map
Vector,Stack
- 向量和数组相似,都可以保存一组数据(数据列表)。数组的大小是固定的,向量的容量是可变的。
- 出了对多线程同步访问有支持外,功能上与ArrayList完全相同。
- Stack是Vector的子类。
Queue
方法 | 用法 |
---|---|
Offer() | 在队列中插入一个元素 |
Poll() | 返回并删除队头 |
Peek() | 返回不删除队头 |
PriorityQueue:根据元素的自然顺序排序,拥有最小数值的元素被赋予最高优先级。
Map
- 数据结构中的图G:=<V,L>
- V是顶点集,L是边集
- Collection的子接口Map
建立 “键”与“元素”间的一一映射
“键”不一定是整数(数组下标)
“键”可以使任意类型的对象