Java 学习笔记7 集合(List+Map)
集合
-
可以动态保存任意多个对象,使用比较方便 提供了一系列方便的操作对象方法:add、remove、set等 使用集合添加,删除元素的示意代码更简洁
List接口方法
-
List 集合类中元素有序(添加顺序和取出顺序一样)、且可重复 List集合中的每个元素都有其对应的顺序索引 即支持索引(从0开始) List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素
常用方法:
list.add(); list.add(1,xxx);//默认为最后的索引 list.addAll(1,list2);//将list2全插在list的第一个元素(包含0)后面 list.get(i);//取出第i+1个元素 list.indexOf(Object obj); //返回集合中obj第一次出现的位置 list.lastIndexOf(Object obj);//返回obj最后一次出现的位置 list.remove(0);//移除置顶位置的元素 list.set(1,"marray")//设指定位置2的元素为marray list.sublist(0,2)返回从下标为0到2位置的子集合(不包含2) //遍历出list集合: Iterator iterator =list.iterator(); while(iterator.hasNext()){ object obj=iterator.next(); System.out.println(obj);} //增强for for(Object o:list){ System.oit.println(o); }
Vector底层结构和源码刨析
-
Vector底层也是一个对象数组,protected Object[] elementData; Vector是线程同步的,即线程安全,Vector类的操作方法 带有synchronized public synchronized E get(int index){ if(index>=elementCount) throw new ArrayIndexOutOfBoundsException(index); return elementData(index); }
LinkedList底层结构
-
底层实现了双向列表和双端队列特点 可以添加任意元素(元素可以重复),包括null 线程不安全,没有实现同步
HashSet的说明
-
HashSet实现了Set接口 HashSet实际上是HashMap public HashSet(){ map=new HashMap<>(); } 可以存放null值,但是只能有一个null HashSet不保证元素是有序的,取决于hash后,再确定索引的结果 不能有重复元素/对象。
HashSet的底层是HashMap(数组+链表+红黑树)
- 创建一个数组,数组的类型是Node[]
- 直接把Node[]数组称为表 table
- 创建结点
Map接口方法
-
Map与Collection并列存在,map.put(key,value);于保存具有映射关系的数据 : Key-Value k-v最后时HashMap$Node node=newNode(hash,key,value,null) Map中的key和value可以时任何引用类型的数据,会封装到HashMap$Node对象中 Map中的Key不允许重复(重复即替换掉);value可以重复 Map的key可以为null,value也可以为null,key为null只能有一个(key不允许重复),value为null可以多个 常用String作为Map的key Key和value之间存在单向一对一关系,即通过key可以找到对应的value
Map接口常用方法
// put 添加 // remove 根据键删除 // clear 清除 // get 根据键获取值 // size 获取元素个数 // isEmpty 判断个数是否为0 // containsKey 检查键是否存在 Map map =new HashMap(); map.put("aa",new Book("",100)); map.put("aa","1");key重复替换 map.put(null,null); map.remove(null); System.out.println(map.get("aa"));//返回1 System.out.println(map.size()); System.out.println(map.isEmpty())//false System.out.println(map.containsKey("aa"));//true map.clear(); System.out.println(map.isEmpty());//true System.out.println(map.containsKey("aa"));//false
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
Java 中子类能继承父类的私有属性吗?