java 集合类及其常用操作总结

来源:互联网 发布:群组推荐算法 编辑:程序博客网 时间:2024/06/13 13:18
集合的接口与继承关系



数组是对象,无初始化默认是0


集合的操作。
1、可以在循环外通过索引删除对象或直接删除对象。
2、在循环过程中从List中删除非基本数据类型以后,继续循环List时会报ConcurrentModificationException 。
3、使用增强的for循环对List进行遍历删除,但删除之后马上就跳出的也不会出现异常
4、不使用增强的for循环的也可以正常删除和遍历, 这里所谓的正常是指它不会报异常,但是删除后得到的 数据不一定是正确的,这主要是因为删除元素后,被删除元素后的元素索引发生了变化。
5、使用Iterator的方式可以顺利删除和遍历

import java.util.*;
迭代器
注意大小写
一:集合通用方法
1,添加删除
c.add()
c.remove()
2,查询
c.size()
c.isEmpty()
c.contains()
3,c.addAll()
c.clear()
c.removeAll();
4,迭代器
;迭代器
Iterator it=a.iterator();
while(it.hasNext())
{
if(it.next=="d")
{
System.out.println(it.next);
}
}
直接输出



List
(01) List 是一个接口,它继承于Collection的接口。它代表着有序的队列。
(02) AbstractList 是一个抽象类,它继承于AbstractCollection。AbstractList实现List接口中除size()、get(int location)之外的函数。
(03) AbstractSequentialList 是一个抽象类,它继承于AbstractList。AbstractSequentialList 实现了“链表中,根据index索引值操作链表的全部函数”。

(04) ArrayList, LinkedList, Vector, Stack是List的4个实现类。
  ArrayList 是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低。
  LinkedList 是一个双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList随机访问效率低,但随机插入、随机删除效率低。
  Vector 是矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现。但是ArrayList是非线程安全的,而Vector是线程安全的。
  Stack 是栈,它继承于Vector。它的特性是:先进后出(FILO, First In Last Out)。
vector与ArrayList都是数组实现,动态数组,Vector线程安全,ArrayList非线程安全


ArrayList(注意大小写)
ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,继承自AbstractList抽象类。灵活的设置数组的大小等好处
1,定义+迭代器
ArrayList a=new ArrayList();=>装基本数据类型和对象
ArrayList<Object> b=new ArrayList<Object>=》对象object可以是基类可以是对象
ArrayList<String> b=new ArrayList<String>=》String对象
2,添加
a.add(“s”);
a.add(5,"s");=》在第5个元素后加s
a1.add(a2);=>将a2添加到a1
a1.add(5,a2)=>将a2添加到a1的第5个之后
3,删除与清空
a.remove(index)=》删除第index个元素
a.remove(“”3);=》匹配删除,但是对象不可以
a.remove(a1)=>删除一整个集合
a.clear()=>清空
4,遍历与修改
a.set(2,'M')=》设定第2个元素为M

遍历:
a.get(i)=》获取第i个元素
迭代器

直接输出=》System.out.println(a);
5,基本
size()
isempty()
contains(Onject o)



LinkedList
1,定义:四种
LinkedList a=new LinkedList();=>装基本数据类型和对象
LinkedList<Object> b=new LinkedList<Object>=》对象object可以是基类可以是对象
LinkedList<String> b=new LinkedList<String>=》String对象
LinkedList<integer> b=new LinkedList<Integer>=》
2,添加
l.add()
l.add(index,i);
l.addFirst(i)
l.addLast(i)
3,删除
l.remove(index)
l.remove(Object);
l.removeFirst()
l.removeLast()
l.clear()
4,替换,访问
l.set(3,"sss");
迭代器
l.get(i);
5,
isempty()
size()


queue+迭代器
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。
1,定义
Queue<Object> q=new LinkedLIst<Object>();=>全部元素
Queue<Date> q=new LinkedLIst<String>()=》对象
Queue<Integer> q=new LinkedLIst<Integer>()=》数字
2,添加
q.add()
q.offer()
q.put()
3,访问
q.peek();=>null
q.element();=>exception
4,删除
q.take();
q.clear();
5,访问并删除
q.remove()
q.poll
6,size(),isEmpty(),hashcode(),。。。

Vector
Vector是矢量队列,它继承了AbstractList,实现了List、 RandomAccess, Cloneable, java.io.Serializable接口。
1,定义
2,添加
v.add()
v.addelement()
v.add(2,4);
3删除
remove(index)
remove("sss")
4,遍历
迭代器
下标
;
Stack
1,定义:同上共四种
Stack s=new Stack()=Stack<Object>
stack<Date>
stack<Integer>
2,添加
s.add()
s.push()
3,访问
s.peek()
4,访问并删除
s.pop()
s.clear();

二:hashSet,hashTable,hashMap

HashTable和HashMap区别
区别一:继承的父类不同
区别二:线程安全性不同
Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。
区别三:是否提供contains方法
HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。
Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。
**区别四:**key和value是否允许null值
其中key和value都是对象,并且不能包含重复key,但可以包含重复的value。
Hashtable中,key和value都不允许出现null值。
HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
PS:这个面试喜欢问。
区别五:哈希值的计算方法不同,Hashtable直接使用的是对象的hashCode,而HashMap则是在对象的hashCode的基础上还进行了一些变化。
区别六:内部实现使用的数组初始化和扩容方式不同,内存初始大小不同,HashTable初始大小是11,而HashMap初始大小是16

hashSet与HashMap
1)HashSet是set的一个实现类,hashMap是Map的一个实现类,同时hashMap是hashTable的替代品(为什么后面会讲到).
(2)HashSet以对象作为元素,而HashMap以(key-value)的一组对象作为元素,且HashSet拒绝接受重复的对象.HashMap可以看作三个视图:key的Set,value的Collection,Entry的Set。 这里HashSet就是其实就是HashMap的一个视图。
HashSet内部就是使用Hashmap实现的,和Hashmap不同的是它不需要Key和Value两个值。
往hashset中插入对象其实只不过是内部做了

1,hashSet
集合的基本用法
迭代器遍历

2,HashTable与hashmap
集合的基本用法
1,定义
2,插入
h.put(1,2);
3,删除
h.remove(key);
h.clear();
4,访问
boolean=h.containsKey(key)
boolean=h.contains(value)
value=h.get(key);







原创粉丝点击