集合

总集合为collection

collection中的元素只能为引用变量

构造方法:

基本的空构造方法和参数为Collection并将其中元素复制成为新集合的方法

基本方法:

Iterator<E> i=new xx.iterator()迭代器,如果不写明E,则集合中元素会被当做Object处理,不可与collection中方法混用

size()返回集合中元素的个数而不是集合的容量

isEmpty()判断集合是否为空

主要子接口为set、list,另外介绍map


List(有序的,即按照加入的顺序存储)


ArrayList

ArrayList<E> array=new ArrayList<>();

第二个<>中的E省略掉了,因为反正都是一样的,但也是后来才可以省略的

构造方法多一个定大小的:ArrayList(int)  int即为设定的容量大小

实现的底层机制是数组,其方法多是查询,常用语查询较多的情况

当向集合中添加对象时 先检查底层数组的容器剩余是否充足 如果不充足 将会扩充容器大小(1.5)

通过Arrays.copyOf将原来数组的内容放置在新的容器大小的数组中 并且将新数组赋值给原来的接收变量

加入元素用add(E),add(E,i)插入元素到指定位置i,若该位置已经有元素x,则将x及其之后的后移

加入集合用add(C),add(i,C)将集合C插入到指定位置i,C中可以是E及其子类

列表操作用clear()   subList(i,i)

复制列表用clone(),此方法只是复制了里表中引用变量的地址,并不是复制了其本身

查找元素用contains(E)   indexOf(E)  lastIndexOf(E)   remove(E)    remove(C)    retainAll(C),使用equals确定是否为同一元素的

处理i位置元素get(i)   remove(i)   removeRange(i,i)   set(i,E)

元素排序用sort(C)根据比较器C进行排序

是否扩容用ensureCapacity(i)不足i则扩容

调整容量用trimToSize()将容量调整至现在的大小

迭代器补充listIterator(),listIterator(i),返回系列表迭代器,spliterator()返回一个遍历器

批量处理用replaceAll(operator)按参数处理全部元素(UnaryOperator<E>)


LinkedList

LinkedList<E> linked=new LinkedList<>();

底层实现机制为双向链表,因为是一个一个连起来的,所以无初始大小不允许null元素,即初始状态为空

不支持随机访问,指定位置访问需要重头开始找

方法以修改为主

与ArrayList相比新增函数:

添加元素:addFirst(E)   addLast(E)   offer(E)   offerLast(E)   offerFirst(E)

删除元素:remove()   removeFirst()   removeLast()   removeFirstOccurrence()   removeLastOccurrence()   poll()   pollFirst()   pollLast()

迭代器:descendingIterator()返回逆向迭代器

获取元素:element()   peek()   peekFirst()   peekLast()   getFirst()   getLast()   get(i)(peek家族空不报错)

栈操作:pop()    push(E)

不要慌,很多长得像的作用都是一样的,实现也没什么区别


Stack(Vector)

Stack<E> stack=new Stack<>();

只有空参这一种构造方法,模仿堆栈结构先进后出,是vector的子类,其实现是同步的

Stack从父类继承了很多方法,但是常用的是只有5个,一般不用父类方法以防混乱

empty()   peek()   pop()   push(E)   search(E)



Set(不包含重复元素)


HashSet

HashSet<E> array=new HashSet<>();

其中元素的放置并不按加入顺序,而是按照他自己设置的hash表地址

在集合中存放数据 根据数据的hashCode值来放置数据的位置 如果两个数据hashCode值一样再去比较两个元素的equals方法 返回false 放置在对应位置  返回true就代表的是相同的元素,

不能对特定位置元素进行操作(因为进入位置未知)

虽然不能用for循环,但是可以用for-each和iterator

重写了add(E)并用其加入元素



LinkedHashSet

LinkedHashSet <E> array=new LinkedHashSet<>();

通过hashCode来决定元素位置,同时又通过链表来维护元素的次序

同样不支持指定位置操作,是HashSet的子类但是无新增的方法


TreeSet

TreeSet<E> array=new TreeSet<>();

底层实现是红黑二叉树版的TreeMap,比较过后放入集合中,是自动比较的

当加入元素为null且用自然顺序或比较器不允许使用null元素时抛出异常

构造方法多两种,其中一种是new TreeSet<>(Comparator);--->根据比较器中的compare函数进行比较

或者是E实现Comparable接口,重写其中的compareTo()方法,根据该方法进行比较,不需要调用equals,但还是要保证相同的

若比较方法返回值为负数,则需要将新元素的位置提前再与之前比较,所以默认升序

新增方法:

ceiling(E)   floor(E)   higher(E)   lower(E)    descendingSet()   first()   last()   headSet(E)   headSet(E,boolean)   

pollFirst()   pollLast()   subSet(E,boolean,E,boolean)   subSet(E,E)   tailSet(E)   tailSet(E,boolean)



Map(采用键值对,key不能重复)


HashMap

HashMap<E,R> array=new HashMap<>();

底层采用hash表的方式存储(就是数组加链表),hash地址和hashCode没有半毛钱关系

值得注意的是:用put(<E,R>)加入新元素,(不用add!)

  没有迭代器,不能用for、for-each,因为Map不是Collection的子接口,其中的键值对为map的内部接口Entry

如要遍历Map,

Set<Map.Entry<E,R>> newarray=array.entrySet();

  然后用newarray的迭代器遍键值对Entry

  再用Entry.getValue()获取R

或者是   Set<E> newarray=array.keySet();

  然后用Set的迭代器遍历E集合    

  再用array.get(E)获取R


TreeMap

TreeMap<E,R> array=new TreeMap<>();

底层实现采用红黑二叉树,注意事项与HashMap、TreeSet的相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值