JAVA集合
数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。
集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。
简单展示一下数组
public class Student {
private String name;
private Integer age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
测试类:
public class Test {
public static void main(String[] args) {
Student students[]=new Student[3];
students[0]=new Student("张三",1);
students[1]=new Student("李四",2);
students[2]=new Student("王五",3);
}
}
这里我们很好的实现了用数组结构存储了三个学生,但是,如果我们再加一个学生,就陷入了尴尬的地步,因为长度固定了
下面介绍三种集合,list,set,map:
1.JAVA集合-List集合
List接口的主要实现类有ArrayList,和LinkedList。
在数据量不大的情况下,这两个类性能差别不大,
一般情况下,集合里的元素很少变化的,一般用ArrayList,
假如集合里元素经常变动,要用LinkedList;底层实现有差别的。
import java.util.ArrayList;
public class TestArrayLit {
private static void pringArrayList(ArrayList<String> arrayList){
System.out.println("当前的集合元素:");
for(int i=0;i<arrayList.size();i++){
System.out.println(arrayList.get(i));
}
}
public static void main(String[] args) {
ArrayList<String> arrayList=new ArrayList<String>();
// 添加元素
arrayList.add("张三");
arrayList.add("李四");
pringArrayList(arrayList);
// 在指定位置插入元素
arrayList.add(1, "小张三");
pringArrayList(arrayList);
// 元素的替换
arrayList.set(2, "小李四");
pringArrayList(arrayList);
// 移除元素
arrayList.remove(0);
pringArrayList(arrayList);
}
}
import java.util.LinkedList;
public class TestLinkedList {
private static void pringLinkedList(LinkedList<String> linkedList){
System.out.println("当前元素的集合:");
for(int i=0;i<linkedList.size();i++){
System.out.print(linkedList.get(i)+" ");
}
System.out.println();
}
public static void main(String[] args) {
LinkedList<String> linkedList=new LinkedList<String>();
linkedList.add("张三");
linkedList.add("李四");
linkedList.add("王五");
linkedList.add("李四");
linkedList.add("赵六");
pringLinkedList(linkedList);
// indexOf 寻找位置
System.out.println(linkedList.indexOf("李四"));
pringLinkedList(linkedList);
// peekFirst 获取第一个元素
System.out.println(linkedList.peekFirst());
pringLinkedList(linkedList);
// peekLast 获取最后一个元素
System.out.println(linkedList.peekLast());
pringLinkedList(linkedList);
// pollFirst 摘取第一个元素
System.out.println(linkedList.pollFirst());
pringLinkedList(linkedList);
// pollLast 榨取最后一个元素
System.out.println(linkedList.pollLast());
pringLinkedList(linkedList);
}
}
2.JAVA集合-Set集合
Set集合是Collection接口的子接口,没有对Collection接口进行扩展,里面不允许存在重复的内容;
import java.util.HashSet;
import java.util.Iterator;
public class TestHashSet {
public static void main(String[] args) {
/**
* 1,HashSet是无序
* 2,不循序有重复的值
*/
HashSet<String> hs=new HashSet<String>();
hs.add("21221");
hs.add("112");
hs.add("312");
hs.add("421");
hs.add("312");
/**
* 用Iterator遍历集合
*/
Iterator<String> it=hs.iterator();
while(it.hasNext()){
String s=it.next();
System.out.println(s+" ");
}
}
}
3.JAVA集合-Map集合
是存放一对值的最大接口,即接口中的每一个元素都是一对,以key->value键值对的形式保存;
import java.util.HashMap;
import java.util.Iterator;
public class TestHashMap {
public static void main(String[] args) {
HashMap<String,Student> hashMap=new HashMap<String,Student>();
hashMap.put("1号", new Student("张三",10));
hashMap.put("2号", new Student("李四",20));
hashMap.put("3号", new Student("王五",30));
// 通过key,获取value
Student s=hashMap.get("1号");
System.out.println(s.getName()+":"+s.getAge());
Iterator<String> it=hashMap.keySet().iterator(); // 获取key的集合,再获取迭代器
while(it.hasNext()){
String key=it.next(); // 获取key
Student student=hashMap.get(key); // 通过key获取value
System.out.println("key="+key+" value=["+student.getName()+","+student.getAge()+"]");
}
}
}
、
然后再说下遍历器
首先是Iterator遍历器,我们给下实例:
先给一个Student类:
public class Student {
private String name;
private Integer age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
import java.util.Iterator;
import java.util.LinkedList;
public class TestIterator {
public static void main(String[] args) {
LinkedList<Student> list=new LinkedList<Student>();
list.add(new Student("张三",10));
list.add(new Student("李四",20));
list.add(new Student("王五",30));
/**
* 用Iterator遍历集合
*/
Iterator<Student> it=list.iterator(); // 返回一个迭代器
while(it.hasNext()){
Student s=it.next(); // 返回迭代的下一个元素。
System.out.println("姓名:"+s.getName()+"年龄:"+s.getAge());
}
}
}
foreach遍历:
import java.util.LinkedList;
public class TestForeach {
public static void main(String[] args) {
LinkedList<Student> list=new LinkedList<Student>();
list.add(new Student("张三",10));
list.add(new Student("李四",20));
list.add(new Student("王五",30));
/**
* 用foreach遍历
*/
for(Student s:list){
System.out.println("姓名:"+s.getName()+"年龄:"+s.getAge());
}
}
}