JAVA 集合类2-MAP接口与迭代器

Posted w944372441

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 集合类2-MAP接口与迭代器相关的知识,希望对你有一定的参考价值。

一.泛型(Generic)

由于放入集合中的元素默认都是Object类型,无法看出其本身自有的类型,当对这些元素进行操作时需要转型才可用,这样效率低还易出错,在JDK1.5版本后引入泛型,规定了此集合中的元素类型,增强了程序的可读性和稳定性。

格式:用<>表示,定义的类型必须是引用类型。后面的<>可以省略。

List<Book> list1 = new ArrayList<Book>();

 二.Map接口的常用方法

Map接口提供了将键映射到值的对象。一个映射不能包含重复的键,每个键最多只能映射到一个值,Map中的元素是通过键(key)值(value)对的形式进行存储的。

Map接口也有两个子类实现类HashMap(哈希表做索引)和TreeMap(二叉树做索引)。

HashMap常用方法:

public class Test{
    
    public static void main(String[] args) {
        Map<Object,Object> map1 = new HashMap<Object,Object>();   //创建HashMap类集合;
        map1.put(Object key, Object value);  //向集合中添加指定的key与value的映射关系;其返回值是是替换出来的value;
        map1.get(Object key);  //获取指定键所对应的值; 
        map1.remove(Object key);  //删除指定键所对应的值;返回值为该值;
        map1.remove(Object key,Object value);  //删除指定键及其所对应的值;如删除成功返回true,否则返回false;
        map1.containsKey(Object key);  //判断是否包含某个键,有返回true,没有返回false;
        map1.containsValue(Object value);  //判断是否包含某个值,有返回true,没有返回false;
        map1.size();  //获取该集合中有几对映射;
        map1.isEmpty();  //判断该集合中是否有元素;
        map1.putAll(Map m);  //将另一个集合中的元素放入该集合;
        map1.clear();  //清除该集合中所有元素;
        map1.keySet();  //获取该集合中所有键组成的Set集合;
        map1.values();  //获取该集合中所有值对象组成的Collection集合;
        //获取map集合中的键值对也可通过遍历方法得到,由于Set类集合没有顺序,需要调用list中的构造方法
        Set<Object> set1 = map1.keySet(); 
        List<Object> list1 = new ArrayList(set1);
        for (int i = 0; i < list1.size(); i++) {
            Object o1 = list1.get(i);
            Object o2 = map1.get(o1);
        }
    }
}

 三.迭代器

为了能够遍历所有集合类型中的元素,优先使用Iterator接口创建迭代器,Iterator接口是所有集合的父类。

Iterator接口中只有3个方法:

1.hashNext():如果仍有元素可以迭代,返回true;

2.next():返回迭代的下一个元素;

3.remove():从迭代器指向的collection中移除迭代器返回的最后一个元素;

注意:迭代器中的remove方法, 绝对不可以与list中的remove(Object)方法混用,会抛出ConcurrentModificationException这个异常。

举例说明:

public class Test{
    
    public static void main(String[] args) {
        List<String> list = new ArrayList();
        list.add("qqqq");
        list.add("wwww");
        list.add("eeee");
        Iterator<String> iter = list.iterator();
        while(iter.hasNext()) {
            String s = iter.next();
            System.out.println(s);
            if (s.equals("wwww")) {
                 iter.remove();            
            }
        }
        System.out.println(list);    
        }
}

输出结果为:

qqqq
wwww
eeee
[qqqq, eeee]

四.Collections类

public class Test{
    
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<Integer>();
        List<Integer> list2 = new ArrayList<Integer>();
        Collections.sort(list1);//默认从小到大排序;
        Collections.shuffle(list1);//随机排序;
         Collections.reverse(list1);//从大到小排序;
         Collections.copy(list1, list2);//将list2中的元素复制到list1中,前提是list1中的元素个数不得大于list2中的元素个数;
         Collections.fill(list1, Integer);//将list1中的所有元素填充为同一类型的相同元素;
         Collections.sort(list1);//对list1中的所有元素进行排序;
         Collections.binarySearch(list1, key);//二分查找法,查找list1中的key元素位置,需要先对元素进行排序;
    }
}

 

以上是关于JAVA 集合类2-MAP接口与迭代器的主要内容,如果未能解决你的问题,请参考以下文章

java基础(17)集合类(1:Collection)

Java的集合Iterator迭代器

集合 Collection List Set 迭代器 Iterator 元素排序

集合迭代器

Java基础知识回顾-19(Collect接口,Iterator迭代器与增强for循环)

JavaSE - 集合类-工具类