List接口与Set接口
set中的元素无重复、无序;检索效率低,插入与删除效率高,且不会改变元素位置;实现类有HashSet,TreeSet
List中的元素有序、可重复;检索效率高,插入与删除效率低(因为会引起其它元素位置的改变);可动态改变自身大小;实现类有ArrayList,LinkedList,Vector
链表LinkedList与数组ArrayList
一般用ArrayList
二者对比
①LinkedList基于双向链表实现;ArrayList基于一段连续空间(数组)实现
②对于随机访问(查找),ArrayList(O(1))优于LinkedList(O(n))
③对于插入与删除,LinkedList优于ArrayList
④对于空间复杂度,ArrayList优于LinkedList。因为LinkedList各节点存储数据与两个引用。ArrayList每次增加容量时约增长50%
LinkedList
import java.util.LinkedList;
LinkedList<数据类型> list = new LinkedList<数据类型>();
常用方法
向指定位置插入元素,默认在末尾list.add((index, )元素);
头部添加元素list.addFirst(元素);
尾部添加元素(等同于add())list.addLast(元素);
移除首个元素list.removeFirst();
移除末尾元素list.removeLast();
返回首个元素list.getFirst();
返回末尾元素list.getLast();
返回数组大小list.size();
迭代元素:
for (int i = 0; i < list.size(); i++) {};
for (数据类型 i : list) {};
ArrayList
import java.util.ArrayList;
ArrayList<引用数据类型> list = new ArrayList<引用数据类型>();
常用方法
向指定位置插入元素,默认在末尾list.add((index, )元素);
返回指定位置元素list.get(index);
修改指定位置元素list.set(index, 元素);
移除元素或指定位置的元素list.remove(元素/index);(移除整形需要(Integer)n)
排序元素:
list.sort();//升序
list.sort(Comparator.reverseOrder());//降序
返回数组大小list.size();
迭代元素:
for (int i = 0; i < list.size(); i++) {};
for (数据类型 i : list) {};
LinkedList与ArrayList的其它方法
向指定位置插入一个集合,默认在末尾list.addAll((index, )collection);
判断是否含有某一元素list.contains(元素);
返回元素第一次出现的索引list.indexOf(元素);
返回元素最后一次出现的索引list.lastIndexOf(元素);
栈Stack
构造函数
Stack()只能创建空栈
Stack st = new Stack();
方法
判断栈是否为空
st.empty();
或st.isEmpty();(Stack继承Vector的方法)
查看栈顶
st.peek();
移除并返回栈顶
st.pop();
e.g.
int a = (Integer) st.pop();
压栈
st.push();
查找对象并返回下标,以1为基数(从1开始的下标)
st.search(obj);
队列Queue
java基于LinkedList实现队列结构
构造函数
Queue<int[]> queue = new LinkedList<int[]>(); // 数组本身是引用类型
方法
入队queue.offer(e);
出队并返回queue.poll(e);
判断队列是否为空queue.isEmpty();
查看头部queue.peek(); // 为空则返回null
双向队列Deque
java基于LinkedList实现双向队列
构造函数
Deque<String> deque = new LinkedList<>();
方法
Queue方法后加First或Last
集合HashSet
类似集合的定义:无重复元素、无序
构造
import java.util.HashSet;
HashSet<引用数据类型> set = new HashSet<引用数据类型>();
常用方法
添加元素set.add(元素);
判断元素是否存在set.contains(元素);
删除元素set.remove(元素);
删除所有元素set.clear();
计算大小set.size();
迭代HashSet:
for (数据类型 i : set) {};
散列表HashMap
类似字典定义:键值对、无序、访问速度快
构造
import java.util.HashMap;
HashMap<引用数据类型, 引用数据类型> map = new HashMap<引用数据类型, 引用数据类型>();
常用方法
添加键值对map.put(key, value);
访问元素map.get(key);
删除元素map.remove(key);
删除所有元素map.clear();
计算大小map.size();
迭代HashMap:
①获取key,并获取value
for (Integer i : map.keySet()) {map.get(i));}
其中keySet()方法用于获取key,get()方法获取value
②只获取value
for(String value: map.values()) {}
其中values()方法用于获取value
迭代器Iterator
一种访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合
构造
import java.util.Iterator;
Iterator<引用数据类型> it = 集合对象(list、map等).iterator();
常用方法
返回下一元素并更新迭代器状态it.next();
判断是否还有下一元素it.hasNext();
删除当前元素it.remove();
循环迭代器:
while(it.hasNext()) {System.out.println(it.next());}