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了。