List、Map、Set
•发布于   •作者 我喜欢吃肉  •289 次浏览  •最后一次编辑是   •来自 博客

Java的集合分为三种
1、List
   List列表中的记录元素添加的顺序,而且可以填充相同的元素。

List接口的特点:

(1)是有序的

(2)元素可以重复,可以有多个null

(3)根据索引值访问里面的元素

List接口的实现类,主要有两个:ArrayList类和 LinkedList类。

ArrayList,扩容一次1.5倍,底层封装的是数组,因此便于查找,增删慢。

LinkedList,底层封装的是链接列表,双节点(前驱,后继),因此便于增删(修改相应的指针域)

List集合遍历方法:

public class ListDemo{
public static void main(String[] args) {
    List arr=new ArrayList();
    arr.add("zhangshiwei");    //1.传统for循环    for(int i=0;i<arr.size()){
        Sysotem.out.print(arr.get(i)+"\t");
    }
    //2.增强for循环
    for(String s:arr){
        Sysotem.out.print(s+"\t");
    }
    //3.迭代器遍历
    Iterator it=arr.iterator();
    while(it.hasNext()){
        System.out.print(it.next()+"\t");
    }

}

主要方法:

add();添加新元素
clear()清楚所有元素

isEmpty();判断是否为空
indexOf();   获取指定元素在集合当中的下标
remove();   移除下标指定的元素
2、Map
   包含的都是“键(Key)-值(value)”对,一个键对应一个值。所以键是不可以重复的。

特点:

   (1) 双列集合(一次存一对)

   (2)键值对,一一对应的映射关系

   (3)键是唯一的,键重复会覆盖之前的(通过重写hashCode()和equals()方法来保证键的唯一性)

主要实现类:HashTable、HashMap、TreeMap

HashTable:底层是哈希表数据结构,线程同步,不可以存储null键和null值。

HashMap:底层是哈希表数据结构,线程不同步,可以存储null键和null值。存和取的顺序不一定一致。便于查找。

TreeMap:底层是二叉树,可以对Map集合中的键进行指定顺序的排序。用于排序。

Map集合遍历方法:

public class MapDemo{
public static void main(String[] args) {
    Map map=new HashMap<Integer,String>();    arr.put(1,"zhangshiwei");     //1.使用keySet()方法
     Set<Integer> ks=map.keySet();
     Iterator<Integer> it=ks.iterator();
     while(it.hasNext){
           Integer Key=it.next();
           System.out.print(key+map.get(key));
}
      //2.使用values()方法
      Collection c=map.values();
      for(String s:c){
             System.out.print(s+"\t");
}
      //3.Map.Entry
       Set<Map.Entry<Integer,String>> s = map.entrySet();
       Iterator<Map.Entry<Integer,String>> it=s.iterator();
       while(it.hasNext){
                Map.Entry<Integer,String> en=it.next();
                System.out.print(en.getKey()+" "+en.getValue());
        }

主要方法:

put(Object key,Object value); 添加一个键-值对,如果key已经存在,则修改其对应的value
get(Object key);   获取key对应的value,如果key不存在则返回null
isEmpty();    判断当前映射是否为空
clear();    清除映射当中的全部内容
szie();    返回当前映射中有多少对键值
containsKey(Object key);  判断当前映射中是否存在指定的key
containsValue(Object value); 判断当前映射中是否存在指定的value
keySet();    返回当前映射中所有的key集合
Collection values();    返回当前映射中所有的value集合

3、Set
   Set集合的元素不区分顺序,且不允许出现相同元素。这里同样的元素指的是以equals()方法判断的
特点:

(1)元素不可以重复(元素唯一性)

(2)存取顺序有可能不一致(无序集合)

(3)访问元素:根据元素自身

主要实现类:HashSet和TreeSet

HashSet:由HashMap实现,底层都是hash表结构。便于查找。

TreeSet:由TreeMap实现,底层都是二叉树结构。用于排序。

Set集合遍历方法:

public class SetDemo{
public static void main(String[] args) {
    Set set=new HashSet();
    set.add("zhangshiwei");
    //1.增强for循环
    for(String s:set){
        Sysotem.out.print(s+"\t");
    }
    //2.迭代器遍历
    Iterator it=set.iterator();
    while(it.hasNext()){
        System.out.print(it.next()+"\t");
    }

}

主要方法:

 boolean  add(Object o);   为容器添加一个元素
   boolean  remove(Object o);   移除一个元素
   int      size();    返回数组大小
   boolean  isEmpty();    判断集合是否为空不包含任何元素
   boolean  contains(Object o);   判断集合当中是否包含指定的元素
   void     clear();    清除所有
   Iterator iterator();    返回迭代器,通常是用来对多种容器的统一遍历



5 回复
有飞鸟的岛屿

可以,很不错的!晚上回来需要总结集合,和遍历集合的几种方法!看的很清晰

会飞的胖波

兄弟不错,有一个瑕疵是values方法。

我喜欢吃肉

values已改,果然在这里面写不报错,就容易犯错

有飞鸟的岛屿

有一个地方改一下,Set的遍历方法和List不全一样,Set中没用get方法,所以不能用普通for循环来遍历,只能用foreach来遍历。遍历方法比list少一个。

我喜欢吃肉

谢谢指正,已改

回到顶部

©2017 Powered by 三十三行伪代码
皖ICP备17005175号-3