• Java各种集合容器的总结


    Java容器指的是List,Set,Map这些类。由于翻译的问题,问到集合,Collection这些指的都是它们几个。

    List

    ArrayList 随机访问快

    LinkedList 插入删除快

    这个好理解,array嘛就是数组,随机访问快。link嘛就是链表,当然是插入删除快了。

    Set 每个元素只能放一次

    HashSet 使用散列

    TreeSet 使用红黑树,会对元素排序,接口是SortedSet。初始化TreeSet时可以传入Comparator对象的实现做为排序函数

    LinkedHashSet 也使用散列,但使用链表来维护插入顺序

    Set的访问顺序

    HashSet按照HashCode的顺序

    TreeSet对元素排序有两种方法:1、对象implements Comparable。2、new TreeSet传入参数T extends Comparator。

       易错点:两个不要搞反了。在创建TreeSet的时候可以不初始化任何排序方法,此时不会报错。但添加对象进去的时候就会报错了,提示cannot be cast to java.lang.Comparable

    LinkedHashSet按照插入的次序显示

    关于HashCode

    HashCode是一个int数值,同一个对象要求在get和put的HashCode是同一个。不同对象的HashCode不要求必须不同,只要equals方法能区分开就可以了。

    一个实用的HashCode应该是基于对象内容的,并且分布平均的

    Map相同的key只能放一次。这个key使用key对象的equals来判断是否重复

    HashMap 类似HashSet,按key的HashCode存放

    LinkedHashMap 可以按照插入次序存放,或者最近最少使用LRU顺序存放。比HashMap慢一点,但迭代访问时更快

    TreeMap 类似TreeSet,基于红黑树排序

    此外还有WeakHashMap, ConcurrentHashMap, IdentityHashMap

    各种容器的遍历:

    1、List集合的遍历

    List<Integer> list = new ArrayList<Integer>();
            //使用Iterator遍历。缺点是不能随机访问
            Iterator iter = list.iterator();
            while(iter.hasNext())
            {
                Integer i = (Integer) iter.next();
            }
            //这个比较好。不过注意调用get(i)的时候千万不要超出List的长度范围,尤其是进行删除操作之后!
            for(int i=0; i<list.size(); i++)
            {
                Integer n = list.get(i);
            }
            for(Integer i : list)
            {
                //可以直接对i操作
            }
            //java8的forEach和lambda表达式组合是最牛的。适合遍历输入或者操作。
            list.forEach(s -> System.out.println(s));

    2、Set集合的遍历

    HashSet<Integer> iset = new HashSet<Integer>();
            iset.add(3);
            iset.add(8);
            iset.add(7);
            iset.add(11);
            //最简单的必须是它
            iset.forEach(i -> System.out.println(i));
            //不能用for了,因为没有随机访问的get函数啦!
            Iterator<Integer> iter = iset.iterator();
            while(iter.hasNext())
            {
                iter.next();
            }

    3、Map集合的遍历

    Map<String, String> map = new HashMap<String, String>();
            map.put("111", "one");
            map.put("zz", "zzzzzzzz");
            map.put("a", "apple");
           
            //对于entrySet迭代
            Iterator iter = map.entrySet().iterator();
            while(iter.hasNext())
            {
                Entry entry = (Entry) iter.next();
                System.out.println(entry.getKey() + ": " + entry.getValue());
            }
           
            //对key的set迭代
            Iterator iter2 = map.keySet().iterator();
            while(iter2.hasNext())
            {
                String key = (String) iter2.next();
                System.out.println(key + ": " + map.get(key));
            }

  • 相关阅读:
    分表分库-------shading jdbc使用
    字符串之特殊符号处理
    【汇编程序】编程将100到200中的奇数求和,结果送到SUM字单元
    【汇编程序】从键盘输入一个大写字母,将其转换成小写字母
    【汇编程序】统计非数字的个数
    【读书笔记】看过的书籍列表整理
    【微机原理】数字电路器件—门 与门 或门 非门电路及实例
    【c语言】递归题
    【汇编程序】BUF为首址的100个字节单元用原码表示的有符号数依次编程用补码表示的有符号数
    【汇编程序】编写一个完整的程序 将这3个数的最大者存放到MAX单元
  • 原文地址:https://www.cnblogs.com/wmm15738807386/p/6723074.html
Copyright © 2020-2023  润新知