Collection:单列集合类的跟接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别时List和Set还有Queue。其中List的特点时元素有序,元素可重复,Set的特点时元素无序且不可重复,Queue与List性质一样,不同之处时Queue是先进先出。
Map:键值对存储,每个值对应一个键,是一种映射关系,在Map集合中可以通过键值Key找到对应的值Value
List接口
方法声明 | 功能描述 |
Void add(int index,Object element) | 将元素element元素插入在List集合的index处 |
Boolean addAll(int index,Collection c) | 将集合c所包含的所有元素插入到List集合的index处的元素 |
Object get(int index) | 返回集合索引index处的元素 |
Object remove(int index) | 删除index索引处的元素 |
Object set(int index,Object element) | 将索引index处元素替换成element对象,并将替换后的元素返回 |
Int indexOf(Object o) | 返回对象o在List集合中出现的位置索引 |
Int lastIndexOf(Object o) | 返回对象o在List集合中最后一次出现的位置索引 |
List subList(int fromIndex,int toIndex) | 返回从索引fromIndex(包括)到toIndex(不包括)处所有元素集合组成的子集合 |
ArrayList集合
ArrayList常见功能
添加public boolean add(E e)
public void add(int index,E element) // 在指定的索引位置添加元素
获取元素
public E get(int index)// 根据索引值获取元素
获取元素个数
public int size() //获取元素个数
删除元素
public boolean remove(Object o) // 直接删除元素
public E remove(int index) //根据索引删除元素 ,并把删除的元素返回
修改元素
public E set(int index,E element)// 使用element 去替换指定索引的元素 , 并返回被替换的元素
package com.ajax;import java.util.ArrayList;public class Example10 {public static void main(String[] args){ArrayList list1=new ArrayList();list1.add("1");list1.add("2");list1.add("3");list1.add("4");list1.add("5");for(Object obj:list1){System.out.println(obj);}}
}
LInkedList集合
查询快,增删慢
package com.ajax;import java.util.ArrayList;
import java.util.LinkedList;public class Example10 {public static void main(String[] args){LinkedList link=new LinkedList();link.add("1");link.add("2");link.add("3");link.add("4");link.add("5");System.out.println(link.toString());Object st= link.getFirst();System.out.println(st);}
}
Iterator接口
Iterator接口也是Java集合框架的成员,但它与Collection系列、Map系列的集合不一样:Collection系列集合、Map系列集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。
Iterator接口里定义了如下4个方法:
–booleanhasNext():如果被迭代的集合还元素没有被遍历,则返回true。
–Objectnext():返回集合里下一个元素。
–voidremove() :删除集合里上一次next方法返回的元素
–voidforEachRemaining(Consumer action),这是Java 8为Iterator新增的默认方法,该方法可使用Lambda表达式来遍历集合元素。
package com.ajax;
import java.util.ArrayList;
importjava.util.Iterator;
importjava.util.LinkedList;public classExample10 {public static void main(String[] args){LinkedList link=newLinkedList();link.add("1");link.add("2");link.add("3");link.add("4");link.add("5");Iterator it = link.iterator();while(it.hasNext()){System.out.println(it.next());}}
}
Foreach循环
for(容器中元素类型 临时变量:容器变量)
package com.ajax;importjava.util.ArrayList;public classExample10 {public static void main(String[] args){ArrayList list1=newArrayList();list1.add("1");list1.add("2");list1.add("3");list1.add("4");list1.add("5");for(Object obj:list1){System.out.println(obj);}}
}
ListIterator接口
为了迭代方式的多元化,在父类的基础上郑家了一下特有的方法
方法声明 功能描述
void add(Object o) 插入
ObjecthasPrevious() 判断对象是否有上个元素
void remove() 删除next或者previous返回的最后一个元素
package com.ajax;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;public classExample10 {public static void main(String[] args){ArrayList link=newArrayList();link.add("1");link.add("2");link.add("3");link.add("4");link.add("5");ListIterator it=link.listIterator(link.size());while(it.hasPrevious()){System.out.println(it.previous());}}
}
//本例表示以集合的最后一个元素开始迭代
Enumeration接口
遍历Vector集合,Vector集合是线程安全的,而ArrayList集合是线程不安全的。
package com.ajax;
importjava.util.ArrayList;
importjava.util.Enumeration;
importjava.util.Iterator;
importjava.util.LinkedList;
importjava.util.ListIterator;
importjava.util.Vector;
public classExample10 {
public static void main(String[] args){
Vector link=new Vector();
link.add("1");
link.add("2");
link.add("3");
link.add("4");
link.add("5");
Enumeration it=link.elements();
while(it.hasMoreElements()){
System.out.println(it.nextElement());
}
}
}
Set接口
Set接口和List接口一样,同样继承Collection接口,并没有对接口进行功能上的补充,只是比该接口更加严格了,Set无序没有重复
HashSet集合
当该集合添加一个对象时,首先会调用对象的hashCode()方法来确定与元素的存储位置,然后再调用对象的equals()方法来确保该位置没有出现重复元素,可以理解为像数据结构中的哈希散列表
package com.ajax;
importjava.util.ArrayList;
importjava.util.Enumeration;
importjava.util.HashSet;
importjava.util.Iterator;
importjava.util.LinkedList;
importjava.util.ListIterator;
importjava.util.Vector;
public classExample10 {
public static void main(String[] args){
HashSet link=new HashSet();
link.add("1");
link.add("2");
link.add("3");
link.add("4");
link.add("1");
Iterator it=link.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
//结果
3 2 1 5 4
没有出现重复值,之所以出现的顺序时无序因为此处的哈希散列表是根据对象的地址来存储的,地址越靠前优先输出
TreeSet集合
原理是自平衡的排序二叉树,特点是存储的元素会按照大小排序,并能去重(平衡二叉树的左孩子必须小于根节点,右孩子大于根节点的值,当出现重复的元素时不做处理,树的结构不会放生变化,因为节点中已经出现该值)。
package com.ajax;
importjava.util.ArrayList;
importjava.util.Enumeration;
importjava.util.HashSet;
importjava.util.Iterator;
importjava.util.LinkedList;
importjava.util.ListIterator;
importjava.util.TreeSet;
importjava.util.Vector;
public classExample10 {
public static void main(String[] args){
TreeSet link=new TreeSet();
link.add("1");
link.add("2");
link.add("3");
link.add("4");
link.add("1");
Iterator it=link.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
//结果:1234 根据平衡二叉树的原理,中序遍历的结果得出1234
Map接口
Map接口利用键值对的方式保存数据,其实现原理就是红黑树,红黑树是二叉查找树,如果读者想具体了解红黑树可以参考:http://blog.csdn.net/eric491179912/article/details/6179908写的很详细
常用的方法
方法声明 功能描述
void put(Objectkey,Object calue) 将指定的值与此映射的值相关联(可选操作)
Object get(Objectkey) 通过key返回值,没有返回null
boolean containsKey(ObjectKey) 如果有映射关系返回true
booleancontainsValue(Object value) 同上
HashMap集合
package com.ajax;
importjava.util.*;
public classExample10 {
public static void main(String[] args){
Map link=new HashMap();
link.put(1, 'a');
link.put(3, 'c');
link.put(2, 'b');
link.put(5, 'd');
link.put(4, 'd');
link.put(4, 'e');
link.put(4, 'f');
Set keySet=link.keySet();//获取键的集合
Iterator it=keySet.iterator();
while(it.hasNext()){
Object key=it.next();
System.out.println("key:"+key+"value:"+link.get(key));
}
}
}
//结果:
key:1value:a
key:2value:b
key:3value:c
key:4value:f
key:5value:d
通过测试可以发现,当键相同的元素存入map集合中的时候,每次保存的值都会发生改变直到最后一个存储的值为止
TreeMap集合
自平衡二叉树排序
package com.ajax;
importjava.util.*;
public classExample10 {
public static void main(String[] args){
Map link=new TreeMap();
link.put(1, 'a');
link.put(4, 'd');
link.put(2, 'b');
link.put(5, 'd');
link.put(3, 'c');
Set keySet=link.keySet();//获取键的集合
Iterator it=keySet.iterator();
while(it.hasNext()){
Object key=it.next();
System.out.println("key:"+key+"value:"+link.get(key));
}
}
}
Properties集合
map接口还有一个实现类Hashtable,它和HashMap十分相似,区别在于Hashstable是线程安全(线程安全不理解的参考:https://zhidao.baidu.com/question/168637634.html)的。
Hashtable存取元素的速度很慢目前基本被HashMap取代,但Hashtable有一个子类Properties主要用来存储字符串类型的键值对,开发中经常存取应用的配置项。