Java集合概念及List和Map遍历

来源:互联网 发布:怎么进入人工智能行业 编辑:程序博客网 时间:2024/06/04 01:12

最近看了很多关于Java集合的概念和使用,在这里做个总结。

先放上之前在慕课网看视频学习的一张图,我们最常使用的是ArrayList和HashMap。


1、ArrayList和ListedList的区别和联系(这是很多面试官会问到的一题)

ArrayList数组线性表的特点为:类似数组的形式进行存储,因此它的随机访问速度极快。

ArrayList数组线性表的缺点为:不适合于在线性表中间需要频繁插入和删除操作,因此每次插入和删除都需要移动数组中的元素。

LinkedList的链式线性表的特点为:适合于在链表中间需要频繁进行插入和删除操作。

LinkedList数组线性表的缺点为:随机访问速度较慢。查找一个元素需要从头开始一个一个的找,速度比较慢。

ArrayList和LinkedList都是线程不安全的。

2、线程安全类(线程安全的类其方法是同步的,每次只能一个访问。是重量级对象,效率较低):

Vector:比ArrayList多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速率)是优先考虑的。

stack:堆栈类,先进后出

hashtable:就比hashmap多个线程安全,hashtable不允许插入空值,hashmap允许

enumeration:枚举,相当于迭代器

StringBuffer是线程安全,而StringBuilder是线程不安全。

3、List排序

Collections.sort(numList);

无參Sort()方法是使用Comparer.Default比较器来排序的。对于对象Student类,可以实现IComparable接口compareTo方法

public int compareTo(User o) {  
        int i = this.getAge() - o.getAge();//先按照年龄排序  
        if(i == 0){  
            return this.score - o.getScore();//如果年龄相等了再用分数进行排序  
        }  
        return i;  

}

4、List集合
List list = new ArrayList();
(1)第一种遍历方式:for遍历
for(Object li : list){
System.out.println(li.toString);
}
(2)第二种遍历方式:ListIterator迭代遍历
ListIterator<String> it = list.listIterator();
while (it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}  

5、Map集合
Map<Integer,String> map = new HashMap<Integer,String>();
//第一种:通过Map.keySet遍历key和value
for(Integer in:map.keySet()){
//map.keySet()返回的是所有key的值
String str = map.get(in);//得到每个key多对用value的值
}

//第二种:通过Map.entrySet遍历key和value
for (Map.Entry<Integer, String> entry : map.entrySet()) {
//Map.entry<Integer,String> 映射项(键-值对)  有几个方法
//entry.getKey() ;entry.getValue(); entry.setValue();            
  //map.entrySet()  返回此映射中包含的映射关系的 Set视图。
System.out.println("key= " + entry.getKey() + " and value= "+entry.getValue());
}

//第三种:通过Map.entrySet使用iterator遍历key和value
 Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
 while (it.hasNext()) {
     Map.Entry<Integer, String> entry = it.next();
     System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}

//第四种:通过Map.values()遍历所有的value,但不能遍历key
for (String v : map.values()) {
      System.out.println("value= " + v);      
}