Java - 集合

阅读数:182 评论数:0

跳转到新版页面

分类

python/Java

正文

一、Collection接口

Collection接口的iterator和toArray方法都用于获得集合中的“所有元素”。前者返回一个“iterator”对象,后者返回一个包含集合中所有元素的数组。

二、Set

Set可以存储null。

Set(接口)

         |-EnumSet

         |-SortedSet(接)

                     |-TreeSet

          |-HashSet

               |-LinkedHashSet

1、HashSet vs TreeSet

是基于Hash算法实现的,其性能通常优于TreeSet。在我们需要排序的功能时,我们才使用TreeSet。HashSet会调用对象的hashCode()方法来获得哈希码。TreeSet使用红黑树对元素进行排序。依靠TreeMap来实现。

2、LinkedHashSet

不仅实现了Hash算法,可以在迭代时,按照元素加入集合时的顺序来显示对象。

三、List

List可以存储null,添加几个,存储几个。

Queue(接)

          |- Deque(接)

                         |- LinkedList(实现List接口)

          |-PriorityQueue

List(接)

      |- ArrayList

      |- Vector(历史集合,线程安全)

                 |- Stack(历史集合,线程安全)

1、ArrayList

内部采用数组实现

2、LinkedList

使用“链表”来实现。

3、快速创建List的方式

方式一:
  List<String> list = new ArrayList<String>();
  String str01 = String("str01");
  String str02 = String("str02");
  list.add(str01);
  list.add(str02);
方式二:
  List<String> list = new ArrayList<String>(){{add("str01"); add("str02");}};

方式三:
List<String> list = Arrays.asList("11","22","33")


四、Map

Map(接)

       |- EnumMap

       |- IdentityHashMap

       |-HashMap

                 |- LinkedHashMap

       |- Hashtable(历史集合)

                  |- Properties(历史集合)

       |-SortedMap(接)

                 |- TreeMap

       |-WeakHashMap


1、TreeMap vs HashMap

可以使用红黑树来对键对象排序。和Set类似,HashMap的速度通常比TreeMap快,只有在需要排序的功能时,才使用TreeMap。HashMap允许null key和null value,而hashtable不允许。 

实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。

2、WeakHashMap

这种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值。

3、IdentityHashMap

HashMap通过equal来比较key的值是否相同,而IdentityHashMap通过==来比较key的引用地址是否相同。

Map hashMap=new HashMap();
hashMap.put(new String("张三"), "100");
hashMap.put(new String("张三"), "100");
        
System.out.println(hashMap.size());

//打印结果为1.
Map identityHashMap=new IdentityHashMap();
identityHashMap.put(new String("张三"), "100");
identityHashMap.put(new String("张三"), "100");
        
System.out.println(identityHashMap.size());
//打印结果为2.

4、两个map取不同

Map<String, String> m3= Maps.newHashMap();
m3.putAll(m1);
m1.entrySet().removeAll(m2.entrySet());//获得差集
m2.entrySet().removeAll(m3.entrySet());//获得差集


五、工具类

1、Arrays

Java提供了Arrays类来封装数组。

2、Collections

是集合对象的工具类,类中方法都是静态的,可以直接以类名.静态方法()的形式调用

 

六、历史集合类

1、被放弃的类

Vector, Stack, Enumeration,Hashtable
由于Vector,Stack, Hashtable, Enumeration都使用了同步机制,并发性能差

2、特殊用途的类

Properties和BitSet由于有着特殊用途,所以不还常使用。




相关推荐

跳表是一种采用了空间换时间思想的数据结构。它会随机地将一些节点提升到更高的层次,以创建一种逐层的数据结构,以提高操作的速度。 <img src="http://1024s.top/

一、jps Java virtual machine Process Status Tool 主要用来输出jvm中运行的进程状态信息,语法格式如下: jps [options] [hostid] -q

因为foreach时ArrayList使用的迭代器在ArrayList中元素增加或减少时存在问题。 解决方法: 最简单的方法,就是不使用foreach,而使用传统的f

一、问题解决方法 修改为如下即可: <if test="enterpriseIds!=null and enterpriseIds.size>0"> 因为集合用size,数组用length。 二、O

一、HashMap HashMap使用链表法避免哈希冲突(相同hash值),当链表长度大于TREEIFY_THRESHOLD(默认为8)时,将链表转换为红黑树。当小于等于UNTREEIFY_THRES

一、printStackTrace 将Throwable或Exception对象的堆栈跟踪输出到错误输出流,作为字段System.err的值。输出的第一行包含此对象的toString()方法的结果。剩

使用getProperties获得的其实是虚拟机的变量如:-Djavaxxxx。 getenv方法才是真正的获得系统环境变量,比如Path之类。

afka在有新消费者加入或者撤出时,会触发rebalance操作,在subscribe订阅主题的时候,我们可以编写回掉函数,在触发rebalance操作之前和之后,提交相应偏移量和获取偏移量。<

一、概述 mybatis原来是apache的一个开源项目,叫做ibatis,2010年由apache迁移到了google code,并且改名为mybatis。2013年迁移到github。 mybat

原因很简单,就一句话,是不是resultType 和resultMap 弄混了? &nbsp; 大致的意思就是无法找到返回值对应的r