Android-List、Set、Map

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的构造函数如下

  1. public LinkedList(): ——生成空的链表
  2. 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());
    }
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值