集合框架:常用的集合类vector、Stack、List、set、Map,工具类Iterator、Collection

xiaoxiao2021-02-28  10

1.vector

Vector(向量):动态数组

为什么需要动态数组?

很多时候,我们无法实现确定数组的元素个数,如果使用静态数组,小了不够用,大了造成空间浪费,这个时候我们就需要动态的数组,可以按照一定增量来增加容量。

Vector的初始容量和增量都是10,可以通过他的构造方法来设置容量和增量。所谓的增量就是在容量不够时增加的量

Size:

Capacity:

Add:

Remove:当传入index时,删除指定位置的元素;当传入object时,删除指定元素的第一项

Vactor一旦扩容,将不回复,但是使用trimToSize能去掉没用的部分,减少浪费。

publicstatic void main(String[] args) {    Vector<Integer> vector1 = new Vector<>(5,2);//初始化一个vector,初始容量为5,增量为2   vector1.add(2);    vector1.add(3);    vector1.add(4);    vector1.add(5);    vector1.add(6);//将某个元素增加到vector    vector1.set(0,100);//用某个元素替换某个位置的元素    /*vector1.remove(1);    vector1.remove(2);    vector1.remove(5);//移除该下标的元素    vector1.remove(new Integer(1));//移除这个元素在vector中的第一项*/    System.out.println(vector1.capacity());    System.out.println(vector1.size());    vector1.trimToSize();    System.out.println(vector1.capacity());//vector的容量    System.out.println(vector1.size());//vector中存的元素个数    System.out.println(vector1.toString());    System.out.println(vector1.get(3).toString());    vector1.add(3,30);//在某个位置之前插入一个元素    System.out.println(vector1.toString());//输出    System.out.println(vector1.indexOf(4));//通过元素找下标    System.out.println(vector1.get(3));//通过下标找元素}

 

2.Stack

publicstatic void main(String[] args) {    Stack<Integer> stack = new Stack<>();    stack.push(2);    stack.push(4);//往栈中增加元素    stack.push(7);    stack.push(9);    /*System.out.println(stack.pop());    System.out.println(stack.pop());    System.out.println(stack.pop());//删除栈顶元素    System.out.println(stack.pop());*/    //System.out.println(stack.peek());//查看栈顶元素不移除    System.out.println(stack.search(2));//查询某个元素的位置,从栈顶开始找,从1开始    System.out.println(stack.empty());//判断是否为空}

 

3.List

List是一个接口,继承自collection接口,常用实现类:ArrayList,Linklist

List没有容量

 

4.set

Set也是一个接口,他表示一个无重复元素的集合,无序、唯一(它是通过hashcode来判断重复的,如果得不到我们想要的结果,那就重写equals方法)

Set的实现类:hashSet

当我们添加了重复的元素,输出时并没有重复的元素。Set的重复的意思是a.equals(b)返回true

存整型自动排序 ,其他情况是乱序的

用set来存能够自动去掉重复的。

 

5.Map

Map是以键值对<Key,Value>的形式存储数据,常用有jdbc(访问数据库)中。

Map也是无序的,且键值要求是唯一,如果有重复的键名,以最后出现的键值对为准。

  

6.Iterator

//使用迭代器遍历listIterator<Integer> iterator = list.iterator();while (iterator.hasNext()){    System.out.println(iterator.next());}//使用迭代器遍历Set集合Iterator<String> setIt = set.iterator();while (setIt.hasNext()){    System.out.println(setIt.next());}//使用迭代器遍历LinkedList集合Iterator<String> linkIt =linkList.iterator();while (linkIt.hasNext()){    System.out.println(linkIt.next());}

 

6.Collection

publicstatic void main(String[] args) {    List<Integer> list = new ArrayList();    list.add(1);    list.add(3);    list.add(6);    list.add(9);    System.out.println(list);    //增加元素    Collections.addAll(list,4,11,16);    System.out.println(list);    //交换位置    Collections.swap(list,4,6);    System.out.println(list);    //随机排序    Collections.shuffle(list);    System.out.println(list);    //升序排序    Collections.sort(list);    System.out.println(list);    //逆序    Collections.reverse(list);    System.out.println(list);    //最大    System.out.println(Collections.max(list));    //最小    System.out.println(Collections.min(list));    //查找——先排序再查找,且必须用升序    Collections.sort(list);    System.out.println(Collections.binarySearch(list,3));}

 

arrayList和vector的区别

1. Vector& ArrayList

1)Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。

2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

2.Hashtable & HashMap

Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。

3.ArrayList & LinkedList

ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更像数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:

从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列 数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中 间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

转载请注明原文地址: https://www.6miu.com/read-2400296.html

最新回复(0)