java集合

数组
    Java中的数组是将数字和对象结合起来,需要明确保存对象的类型,在查询时不需要做类型转换,可以保存基本的数据类型,但是一旦数组的大小确定之后就不能被修改。没有排序,数组的下标和装入的对象一一对应。
Collection
    collection是存放单一元素的集合的根接口,表示一组对象,JDK中对该接口没有提供任何的实现,都是通过其子接口List,Set等接口来实现,在泛型处理中,容器不能持有基本数据类型如int,float等,但是可以持有其原生对象Integer,Float,Character等。
List接口
    常用的实现类有ArrayList,LinkedList,Stack,Vector等,和数组的性质一样,有序,但是可以自动扩容,允许重复的元素出现,但是不允许空的元素出现,在使用过程中,如果要进行大量的随机访问就是用ArrayList,如果要经常做从集合中插入或删除元素,就是用LinkedList。在迭代元素时可以使用Iterator和foreach循环来实现,按照插入的顺序迭代出来,但是使用Iterator的时候不保证顺序。ArrayList和LinkedList不是线程安全的,在使用时要注意,如果需要同步则需要使用List list = Collections.synchronizedList(new ArrayList(...))来进行包装。LinkedList可以提供对Queue和Stack的支持,队列和栈。PriorityQUeue是Queue的实现类,在插入数据的时候会进行排序,优先级低的排在前面,如代码:
Queue<Integer> queue = new PriorityQueue<Integer>();
queue.add("cqupt");
queue.add("cfupty");
则在输出的时候后add进去的数据会先输入出来。
Map接口
     map是将对象和对象相关联,HashMap可以用来快速访问,而TreeMap则要保证key始终处于排序状态,LinkedHashMap要保持元素的插入顺序,也提供一种快速访问。对map进行迭代可以选择使用
for(Entry<String, String> entry : map.entrySet()) {
     System.out.println(entry.getValue());
}
或者使用Iterator来迭代。key值不能重复。
如果在put的时候key重复,则原来的key和value都会被替代,而且map的key和value都可以嵌套其他的集合。如果在map的key中放了某个类的对象进去,在取的时候需要重写equals和hashCode方法来保证取出的正确性。
HashMap不是线程安全的,key和value都允许null值,这两点是HashMap和HashTable的区别。
TreeMap是要保证顺序,为了防止非同步的访问,则需要进行一次包装
Map m = Collections.synchronizedMap(new HashMap(...))

一些概念:

1、容量(capacity),散列表中的桶的数量

2、初始化容量,在散列表创建时设置的桶的数量,HashMap和HashSet都允许设置容量。

3、负载因子(load factor),等于容器的size/容量,如果负载因子为0,则表示的是空的散列表,1表示满了的散列表

4、如果两个对象相同,则他们的hashCode一定相同,如果两个对象对象的hashCode相同,但这两个对象不一定相同。
Set接口
    不接受重复元素,Hashset提供最快的查询速度,TreeSet保持元素处于排序状态,LinkedHashSet以插入顺序保存元素。

 

HashCode

计算hashCode:

1、将int变量result赋值给某个非零值常量

2、为对象内的每个有意义的域f(在equals方法中要比较的域) ,来计算一个int类型的值c

boolean      c = (f?0:1)

byte,char,short,int     c=(int)f

long  c=(int)(f^(f>>>32))

float

 

 

   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值