1.集合概述
List的特点是元素有序、元素可重复。
Set集合的特点元素无序并且不可重复
2.Collection接口
具体方法可以查找JavaAPI
3.List接口
List集合特点就是元素有序,即元素的存入顺序和取出顺序一致。
ArrayList集合:可以看做一个长度可变的数组,add()和get()方法实现元素的存取。
package st.peter.list;
import java.util.ArrayList;
public class Demo01 {
public static void main(String[] args) {
ArrayList arryList = new ArrayList();
//向集合中添加元素
arryList.add("stu1");
arryList.add("stu2");
arryList.add("stu3");
arryList.add("stu4");
System.out.println("集合的长度:"+arryList.size());
System.out.println("集合的第二个元素:"+arryList.get(1));
}
}
ArrayList集合的底层是使用一个数组来保存元素,在增加或删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大量的增删操作。但这种数组的结构允许程序通过索引的方式访问元素,因此ArrayList集合查找元素很便捷。
LinkedList集合
集合内部是双向循环链表:增删操作有很高的效率。
package st.peter.list;
import java.util.LinkedList;
public class Demo02 {
public static void main(String[] args) {
LinkedList link = new LinkedList();
link.add("stu1");
link.add("stu2");
link.add("stu3");
link.add("stu4");
System.out.println(link.toString());
link.add(3,"student");
link.addFirst("First");
System.out.println(link);
System.out.println(link.getFirst());
link.remove(3);
link.removeFirst();
System.out.println(link);
}
}
Iterator接口
package st.peter.list;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo03 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("a1");
arrayList.add("a2");
arrayList.add("a3");
arrayList.add("a4");
Iterator it = arrayList.iterator();
while(it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
}
}
JDK5.0新特性-foreach循环
语法格式:
for(容器中元素的类型 临时变量:容器变量){
执行语句
}
package st.peter.list;
import java.util.ArrayList;
public class Demo04 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("Jack");
arrayList.add("Rose");
arrayList.add("Tom");
for(Object obj:arrayList) {
System.out.println(obj);
}
}
}
forecah循环不能改变数组中的元素
package st.peter.list;
import java.util.ArrayList;
public class Demo04 {
public static void main(String[] args) {
String[] str ={"Jack","Rose","Tom"};
for(Object obj:str) {
obj = "rr";
}
System.out.println(str[0]+str[1]+str[2]);
for(int i=0;i<str.length;i++) {
str[i] = "rr";
}
System.out.println(str[0]+str[1]+str[2]);
}
}
Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的remove()方法去删除元素,会出现异常。
package st.peter.list;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo05 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("Jack");
arrayList.add("Annie");
arrayList.add("Rose");
arrayList.add("Tom");
Iterator it = arrayList.iterator();
while(it.hasNext()) {
Object obj = it.next();
if("Annie".equals(obj)) {
arrayList.remove(obj);
}
}
System.out.println(arrayList);
}
}
解决方法(1)加break语句
package st.peter.list;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo05 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("Jack");
arrayList.add("Annie");
arrayList.add("Rose");
arrayList.add("Tom");
Iterator it = arrayList.iterator();
while(it.hasNext()) {
Object obj = it.next();
if("Annie".equals(obj)) {
arrayList.remove(obj);
break;
}
}
System.out.println(arrayList);
}
}
(2)用迭代器本身的删除方法
package st.peter.list;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo05 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("Jack");
arrayList.add("Annie");
arrayList.add("Rose");
arrayList.add("Tom");
Iterator it = arrayList.iterator();
while(it.hasNext()) {
Object obj = it.next();
if("Annie".equals(obj)) {
it.remove();
}
}
System.out.println(arrayList);
}
}
4.Set接口
(1)HashSet集合:根据对象的哈希值来确定元素在集合中的存储位置
package st.peter.list;
import java.util.HashSet;
import java.util.Iterator;
public class Demo06 {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("Jack");
set.add("Eve");
set.add("Rose");
set.add("Rose");
Iterator it = set.iterator();
while(it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
}
}
(2)TreeSet集合:以二叉树的方式来存储元素
package st.peter.list;
import java.util.Iterator;
import java.util.TreeSet;
public class Demo07 {
public static void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add("Jack");
ts.add("Helena");
ts.add("Helena");
ts.add("Eve");
Iterator it = ts.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
5.Map接口:不能重复,键相同,值覆盖
package st.peter.list;
import java.util.HashMap;
import java.util.Map;
public class Demo08 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("1", "Jack");
map.put("2", "Rose");
map.put("3", "Lucy");
System.out.println("1:"+map.get("1"));
System.out.println("2:"+map.get("2"));
System.out.println("3:"+map.get("3"));
}
}
Map的遍历方式:
第一种先遍历键,再根据键取出值。
package st.peter.list;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo08 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("1", "Jack");
map.put("2", "Rose");
map.put("3", "Lucy");
Set keySet = map.keySet();
Iterator it = keySet.iterator();
while(it.hasNext()) {
Object key = it.next();
Object value = map.get(key);
System.out.println(key+":"+value);
}
}
}
另一种是先获得集合中所有的映射关系,然后从映射关系中取出键和值。
调用的是entrySet()方法:
package st.peter.list;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo10 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("1", "Jack");
map.put("2", "Rose");
map.put("3", "Lucy");
Set entrySet = map.entrySet();
Iterator it = entrySet.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)(it.next());
Object key = entry.getKey();
Object value = entry.getValue();
System.out.println(key+":"+value);
}
}
}
6.泛型
泛型的语法:
ArrayList<参数化类型> list = new ArrayList<参数化类型>();
package st.peter.list;
import java.util.ArrayList;
public class Demo09 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("String");
list.add("Collection");
for(String s:list) {
System.out.println(s);
}
}
}
8.Arrays工具类
sort()方法对数组进行排序
binarySearch(Object[] a,Object key)方法查找数组中的元素
copyOfRange(int[] original,int from,int to)拷贝数组中的元素
fill(Object[] a,Object val)用一个值替换数组中所有的值
toString(int[] arr)把数组转化为字符串