List
list是一个有序集合,而且允许有相同的元素
list接口的常用类有:LinkedList、ArrayList、Vector和Stack
ArrayList其实就是一个动态数组,可以实现可变大小的数组,它允许所有元素,包括null
好处:动态的增加和减少元素
实现了ICollection和IList接口
灵活的设置数组的大小
ArrayList的重要方法
(构造器)public ArrayList(); 默认的构造器,将会以默认(16)的大小来初始化内部的数组
public ArrayList(ICollection); 用一个ICollection对象来构造,并将该集合的元素添加到ArrayList
public ArrayList(int); 用指定的大小来初始化内部的数组
ArrayList遍历的三种方式
public class ArrayListTraversal {
public void arrayListTraversal(List lists){
/* 第一种遍历方式 */
System.out.print(“for循环的遍历方式:”);
for (int i = 0; i < lists.size(); i++) {
System.out.print(lists.get(i));
}
System.out.println();
/* 第二种遍历方式 */
System.out.print("foreach的遍历方式:");
for (Integer list : lists) {
System.out.print(list);
}
System.out.println();
/* 第三种遍历方式 */
System.out.print("Iterator的遍历方式:");
for (Iterator<Integer> list = lists.iterator(); list.hasNext();) {
System.out.print(list.next());
}
}
public static void main(String[] args) {
List<Integer> lists = new ArrayList<Integer>();
/* 添加元素 */
for (int i = 0; i < 10; i++) {
lists.add(i);
}
new ArrayListTraversal().arrayListTraversal(lists);
}
}
LinkedList实现list接口,允许null元素,此外LinkedList提供额外的get、remove
insert方法在LinkedList的首部和尾部,这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)
LinkedList的构造函数如下
- public LinkedList(): ——生成空的链表
- public LinkedList(Collection col): 复制构造函数
LinkedList遍历方式
迭代器遍历
Iterator iterator=linkedList.iterator();
while(iterator.hasNext()){
iterator.next();
}
for循环get()遍历
for(int i=0;i<linkedList.size();i++){
linkedList.get(i);
}
Foreach循环遍历
for(Integer i:linkedList);
通过pollFirst()或pollLast()遍历
while(linkedList.size()!=0){
linkedList.pollFirst();
}
通过removeFirst()或removeLast()遍历
while(linkedList.size()!=0){
linkedList.removeFirst();
}
效率测试
测试以上几种遍历方式的效率,部分代码如下:
System.out.println("-----------------");
linkedList.clear();
for(int i=0;i<10000;i+=){
linkedList.add(i);
}
//迭代器遍历
long start=System.currentTimeMillis();
Iterator iterator=linkedList.iterator();
whie(iterator.hasNext()){
iterator.next();
}
long end=System.currentTimeMillis();
System.out.println(“Iterator:”+(end-start)+“millis”);
//顺序遍历(随机遍历)
start=System.currentTimeMillis();
for(int i=0;i<linkedList.size();i++){
linkedList.get(i);
}
end=System.currentTimeMillis();
System.out.println(“for:”+(end-start)+“ms”);
//另一种for循环
start=System.currentTimeMillis();
for(Integer i:linkedList);
end=System.currentTimeMillis();
System.out.println(“for2”+(end-start)+“ms”);
// 通过pollFirst()或pollLast()来遍历LinkedList
LinkedList temp1=new linkedList<>();
temp1.addAll(linkedList);
start=System.currentTimeMillis();
while(temp1.size()!=0){
temp1.pollFirst();
}
end=System.currentTimeMillis();
System.out.println(“pollFirst:”+(end-start)+“ms”);
// 通过removeFirst()或removeLast()来遍历LinkedList
LinkedListtemp2=new LinkList<>();
temp2.addAll(linkedList);
start=System.currentTimeMillis();
while(temp2.siez()!=0){
temp2.removeFirst();
}
end=System.currentTimeMillis();
System.out.println(“removeFirst:”+(end-start)+“ms”);
import java.util.ArrayList;
import java.util.LinkedList;
public class Demo41{
public static void main(String[] args){
ArrayList arraylist = new ArrayList<>();
arraylist.add(“1”);
arraylist.add(“2”);
arraylist.add(“3”);
for (int i = 0; i < arraylist.size(); i++){
int tmp = (int) arraylist(i);
System.out.println(tmp);
}
LinkedList<String> linkedlist = new LinkedList<>();
linkedlist.add("1");
linkedlist.add("2");
linkedlist.add("3");
linkedlist.addFirst("4");
for (int i = 0; i < linkedlist.size(); i++){
String tmp = (String) linkedlist.get(i);
System.out.println(tmp);
}
}
}
Set和Map
Set不保存重复的元素,因此存入Set的每个元素都必须是唯一的,同时Set接口不保证维护元素的次序
HashSet:不允许出现重复元素
不保证集合元素的顺序
允许包含值为null的元素,但最多只能有一个null元素
import java.util.HashSet;
import java.util.Iterator;
public class Demo42{
public static void main(String[] args){
HashSet<String> hashSet = new HashSet<>();
hashSet.add("1");
hashSet.add("2");
hashSet.add("3");
hashSet.add("2");
hashSet.add("3");
Iterator<String> iterator =hashSet.iterator();
while(iterator.HashSet()){
String string = iterator.next();
System.out.println(string);
}
}
Map主要用于存储键值对,根据键得到值,因此不允许键重复,但允许值重复
HashMap是最常用的一个Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度
HashMap最多只允许一条记录的键为null,允许多条记录的值为null
import java.util.HashMap;
import java.util.Iterator;
public class Demo42{
public static void main(String[] args){
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put("name","tom");
hashMap.put("age","11");
System.out.println(hashMap.get("age"));
Iterator<Entry<String,String>> iterator = hashMap.entrySet().iterator();
while(iterator.hashNext()){
Entry<String,String> entry = iterator.next();
System.out.println("Key"+getkey()+"val="+entry.getValue());
}
}
}