java基础学习笔记_集合

数组和集合的区别
1)数组的长度一初始化就是固定的,不能改变; 集合长度可变。
2)元素固定,建议用数组,因为效率快直接在内存中创建了数组,元素个数多少,数组长度就定义多大;
    部分集合底层也是数组实现的,它会有个初始值,超过这个初始值就会再重新创建一个数组将原数组元素
    拷贝到新数组中。
Collection col = new ArrayList();
    col.add(123); //object自动装箱了
    col.clear(); //清空集合
col1.constainsAll(col2); //传入的集合是当前集合的子集就返回true;
col1.removeAll(col2); 
//只要是调用集合col1中包含了col2中的元素,包含的元素删除(删除交集) 
即:col1与col2有交集,删除交集,返回值为true; 无交集,返回值为false;

col1.retainAll(col2); 
//取两个集合交集,再赋值给调用集合;只要调用的集合(原集合col1)改变了返回值为true,否则false;

List 和 Set 区别?
List: 可重复,有存储顺序;
set:不可重复,无序;
易错题1:
    for(Iterator it = list.iterator();it.hasNext();) {
            String str = (String)it.next();
            if(str.equals("bbb"))
                    list.add("ddd"); //出现异常:并发修改异常ConcurrentModificationException
    }
//解决办法:使用ListIterator,Iterator的子类,功能更加强大。 ListIterator中有一个add方法。


int[] arr = {1,2,3};
for(int i : arr){  //增强for循环,i是定义临时变量,记录中容器的元素,arr代表的是容器
    System.out.println(i+" "); 
}
增强for循环底层也依赖于迭代器,所以在遍历的时候也不允许添加操作。

ArrayList、LinkedList、Vector区别
ArrayList 数组实现,增删慢,查找快;
LinkedList 链表实现,增删快,查找慢;
Vector 数组实现,原理和ArrayList相同,但线程安全,增删慢,查找慢;

Set   不可重复, 没索引
HashSet 使用哈希算法去重复, 效率高, 但元素无序
TreeSet 使用二叉树算法排序, 可以指定元素的存储顺序
LinkedHashSet HashSet的子类, 原理相同, 除了去重复之外还能保留存储顺序


HashSet
1.HashSet原理
我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低
哈希算法提高了去重复的效率, 降低了使用equals()方法的次数
当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象
如果没有哈希值相同的对象就直接存入集合
如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较
比较结果为false就存入, true则不存
2.将自定义类的对象存入HashSet去重复
类中必须重写hashCode()和equals()方法
hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
equals(): 属性相同返回true, 属性不同返回false

TreeSet
1.特点
TreeSet是用排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列
2.使用方式
a.自然顺序(Comparable)
TreeSet类的add()方法中会把存入的对象强转成Comparable类型
调用对象的compareTo()方法和集合中的对象比较
根据compareTo()方法返回的结果进行存储
b.比较器顺序(Comparator)
创建TreeSet的时候可以制定 一个Comparator
如果传入了Comparator, 那么TreeSet就不会按照自然顺序排序了
add()方法内部会自动调用Comparator接口中compare()方法排序
c.两种方式的区别
TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
TreeSet如果传入Comparator, 就优先按照Comparator

Map集合: 存储键值对
Map直接子类:
    HashMap
    Hashtable
    LinkedHashMap
    TreeMap
方法
    put(key,value); //与add作用相同
    putAll(map); //相当于addAll
    
 map集合键值唯一:
    相同键值的数据添加到map,后面的值会将前面的值覆盖
    clear(); //清空map
    remove(key); //删除key,并将value返回
    containsKey(key); //是否包含key
    containsValue(value); //是否包含value
    isEmpty(); //map是否为空
int size(); //获取map集合元素个数
V get(key);//通过键获取值,还可以作为判断某个键是否存在的依据,不存在返回null
Collection values(); //获取map集合中所有值;
Set  keySet(); //获取map集合中所有键
entrySet();
//遍历集合
Set<String> set = map.keySet();
for(String key : set){
System.out.println(key+" "+map.get(key));
}

Set<Entry<String,Integer>> entrySet = map.entrySet();
for(Entry<String,Integer> entry : entrySet ){
System.out.println(entry.getKey+"   "+entry.getValue());
}

interface Demo{
interface Demo1{
    public void show();
}
}

class DemoTest implements Demo.Demo1{ //调用Demo内部接口Demo1
    public voidd show(){}
}

Hashtable和HashMap区别??
1)Hashtable中键和值不允许为null;HashMap中键和值都可以为null;
2)Hashtable 线程安全,HashMap是线程不安全的;
3)继承体系不一样。
    
Collections工具类
    常用方法
    sort(list); //自然排序
    sort(list,比较器); //根据比较器产生顺序对指定列表排序
    swap(list,int x,int y); //在指定列表的位置交换元素
    max(list); //自然排序找最大值
    min(list); //自然排序找最小值
    reverse(list); //饭转播指定列表元素的顺序 
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值