集合之集合原理(一)

数组
1.数组的大小是固定的
       int a[]=new int[5];
2.数组是一种一尾的结构

范型

Vector,Arraylist  ->通过数组保存放入的内容(扩容.减容)
                    在频繁插入.删除的情况下。性能低
                    0(1)

Vector     -> 线程安全的
ArrayList  ->非线程安全的

LinkedList  ->使用双向链表实现
                  get实现速度慢  0(n)
              非线程安全的


TreeSet ->  数据有序
            二分法
            26
            50>25>37>31>28>27>26
            2^(n-1)>100

            n条记录   log2 N
            插入.删除性能低
            查找:性能最高
            Comparable  (比较类要实现这个接口)               

HashSet -> 分类
            100万数据 ->Set
            n=100
            要把数据转换为一个数字%n ->余数 分类依据
            m -> 数字%n ->余数

            优点:插入删除性能高0
            查找:性能较高
            (比较类要实现这个接口)
            Object::hashCode   ->把数据转换成内存地址(数字)         (此处是重点)
            Object::equals     ->按照索引判断                         (实现这两个方法可以直接在Eclipse中自动生成)
(以上是线性的)


(下面是集合的键值对)
HashMap  
Hashtable  线程安全的    Properties  Java中的配置文件常用(重点)
TreeMap

 


各种集合的比较

一.ArrayList与Vector :
   1.相同点  :   a.可以重复添加元素 . b.按索引查找元素
   2.不同点  :   a.线程安全性(ArrayList是不安全的,但效率高,一般建议采用ArrayList)
                  b.都有一个初始容量,其中Vector提供了设置增长空间的方法

二.HashMap和Hashtable
   主要从三方面来说:
          一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
          二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
          三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
 
三.List 和 Map 区别
          List : 存储单列数据的集合,数据是有顺序,并且允许重复
          Map  : 存储键和值这样的双列数据的集合,存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的
 

四.List, Set, Map是否继承自Collection接口?
          List,Set是,Map不是

五.List、Map、Set三个接口,存取元素时,各有什么特点?
       以下是它们3个最重要的特点:
         List 以特定次序来持有元素,可有重复元素。
         Set 无法拥有重复元素,内部排序。
         Map 保存key-value值,value可多值。

六. LinkedList

          LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,
          但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
         (重点)LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。


七、Collection 和 Collections的区别。
  Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。


八.常用集合类及对应的接口
    最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操    作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
    Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
    ArrayList/Vector  >>List
    HashSet/TreeSet   >>Set      Collection(接口)

    Propeties/HashTable
    TreeMap/HashMap              Map(接口)

九.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
    对。
    如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等。
    如果不是要保存在HashSet或HashMap,则与hashcode没有什么关系了,这时候hashcode不等是可以的
           例如arrayList存储的对象就不用实现hashcode,当然,我们没有理由不实现,通常都会去实现的。

 

  (HashSet实现 hashCode()和equals(Object obj)的函数(在操作类里实现))
   @Override
 public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + score;
  return result;
 }
 @Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())
   return false;
  Student other = (Student) obj;
  if (score != other.score ||  !name.equals(other.name))  //主要是在这里规范添加数据的比较机制
   return false;
  return true;
 };

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值