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

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

//使用迭代器遍历list
Iterator<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了。


猜你喜欢

转载自blog.csdn.net/qq_38314823/article/details/80600147