zoukankan      html  css  js  c++  java
  • 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.hasNext():如果仍有元素可以迭代,返回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();  //创建list的迭代器
            while(iter.hasNext()) {  //判断是否有元素可以迭代,如果有,返回false,进入循环。
                String s = iter.next();  //返回迭代的下一个元素;
                if (s.equals("wwww")) {  //将“wwww”从集合中删除;
                     iter.remove();            
                }
            }
            System.out.println(list);    
            }
    }

    输出结果为:

    qqqq
    wwww
    eeee
    [qqqq, eeee]

    还有一种常用的迭代器ListIterator,是Iterator接口的子接口,除拥有父类接口的方法外,还有自己的一些方法。

    例:

    public static void main(String[] args) {
            List<String> list = new ArrayList();
            ListIterator<String> ls = list.listIterator();    //创建listIterator迭代器
            ls.add(String e);    //将指定元素插入列表;
            ls.hasPrevious();    //逆向遍历列表;previous:前一个
            ls.set(String e);    //用指定元素替换返回的最后一个元素;
            ls.nextIndex();    //返回对 next 的后续调用所返回元素的索引;
            ls.previousIndex();    //返回对 previous 的后续调用所返回元素的索引;
        }

    四.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元素位置,需要先对元素进行排序;
        
    Collections.addAll(list1, 1,3,5,7,9);     //向指定集合中插入任意长度同类元素; } }

     五.Comparable接口

    如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个类大小的方法。需要重写compareTo方法。

    compareTo(T,o):T是此对象,o是指定对象;比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

    举例说明对书类进行价格排序,需要在书类重写compare To方法。

    @Override
        public int compareTo(Book o) {
            if (this.price > o.getPrice()) {
                return 1;
            }
            if (this.price == o.getPrice()) {
                return 0;
            }
            return -1;
        }

    重写此方法后,便可以使用Collections方法进行排序。

  • 相关阅读:
    DBG
    gdb Debugging Full Example
    Java Warmup
    Dtrace for Linux 2016
    分布式系统理论进阶
    Java theory and practice
    Dealing with InterruptedException
    JVM 虚拟化
    Intro to Filtering with Network Monitor 3.0
    spring 官方文档
  • 原文地址:https://www.cnblogs.com/wyc1991/p/9026787.html
Copyright © 2011-2022 走看看