Java集合(一)
2017-06-14 本文已影响9人
浮桥小麦
1.引用数据类型数组
1.在其它包下创建一个学生类
public class Student {
//两个私有成员变量
private String name;
private int age;
//空参构造
public Student() {
super();
}
//有参构造
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写toString方法
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
#2.使用这个学生类创建引用数据类型数组
//int[] arr = new int[5];//创建基本数据类型数组
//这种创建数组的方式和这个iOS的差别还是蛮大的
Student[] arrs = new Student[5];//创建引用数据类型数组
arrs[0] = new Student("tmac",23);//创建一个学生对象,存储在数组中的第一个位置
arrs[1] = new Student("kobe",21);
arrs[2] = new Student("cluo",22);
arrs[3] = new Student("meixi",24);
arrs[4] = new Student("jjtmac",26);
for (int i = 0; i < arrs.length; i++){
//这里打印引用时,重写toString方法
System.out.println(arrs[i]);
}
#注:弄懂这个数组在内存中的存储图解
2.集合和数组的区别
123.png#集合中两个继承者
List: 有序(存和取的顺序一致),有索引,可以存储重复值
Set: 无序(存和取的顺序不一致),无索引,不可以存储重复值
1233.png
3. Collection接口的学习
//Collection学习
//1.Collection是个接口不能直接初始化。但是可以用实现了这个接口的子类
//利用父类引用指向子类对象
Collection c = new ArrayList();
//add方法,可以添加任意对象
boolean b1 = c.add("abc");
boolean b2 = c.add(true);//可以直接放boolean类型的,因为会自动装箱
boolean b3 = c.add(100);//自动装箱
boolean b4 = c.add(new Student("tmac",5));
System.out.println(b4);//其实返回的都是true,但是还是要这样设计的原因是:Set中存储了重复的就会返回false
System.out.println(c);
System.out.println("1-------------------");
//2.删除方法
Collection c1 = new ArrayList();
c1.add("tmac");
c1.add("jj");
c1.add("99");
c1.add("kobe");
System.out.println(c1);
//remove方法
c1.remove("99");//删除指定元素
System.out.println(c1);
System.out.println("2-------------------");
//3.contains:是否包含,返回boolean
System.out.println(c1.contains("jj"));
System.out.println("3----------------------");
//4. clear清空
c1.clear();
System.out.println(c1);
System.out.println("4---------------------");
//5.isEmpty:判断是否为空
System.out.println(c1.isEmpty());
System.out.println("5---------------------");
//6. int size():获取集合中元素的个数
c1.add("我爱你");
int num = c1.size();
System.out.println(num);
4. 集合的遍历之集合转数组遍历
//1.
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
//toArray方法将集合转成数组,这个方法返回的是Object[]的数组
Object[] strArr = c.toArray();
for (int i = 0; i < strArr.length; i++){
System.out.println(strArr[i]);
}
//存自定义对象
Collection c1 = new ArrayList();
c1.add(new Student("jj",89));
c1.add(new Student("jhj",78));
c1.add(new Student("jfjdk",165));
Object[] arr = c1.toArray();
for (int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
5. 带All方法功能演示
//1. boolean addAll(Collection c):集合中添加一个集合
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
//创建第二个集合
Collection c1 = new ArrayList();
c1.add("d");
c1.add("e");
c1.add("f");
c.addAll(c1);
//注意这种情况,自己试试就知道什么效果了 c.add(c1);
System.out.println(c);
//2. boolean removeAll(Collection c):移除一个集合
c.removeAll(c1);//删除的是交集
System.out.println(c);
//3. boolean containAll(Collection c):判断是否包含这个集合
boolean result = c.containsAll(c1);
System.out.println(result);
//4. boolean retainAll(Collection c):保留交集
Collection c2 = new ArrayList();
c2.add("j");
c2.add("e");
c2.add("f");c1.retainAll(c2);//保留交集,当c1改变了,就是true,如果c1没有变,就返回false
System.out.println(c1);
7. 集合迭代器遍历
//需要查看集合中的每个元素,用迭代
//1.对集合中的元素进行迭代-遍历
Collection c = new ArrayList();
c.add("ta");
c.add("j");
c.add("dd");
c.add("h");
//获取迭代器-iterator:迭代器
Iterator it = c.iterator();
//获取到迭代器后,可以用迭代器中的方法了
//2.判断集合中是否有元素
//boolean b = it.hasNext();
// System.out.println(b);
for (int i = c.size(); i > 0; i--){
//3.通过next()方法获取其中的元素
boolean b = it.hasNext();
if (b){
Object ob = it.next();
System.out.println(ob);
}else{
i = 0;
System.out.println("集合中已经没有元素了");
}
}
System.out.println("1-----------------");
//4.我们自己的类放在集合中,如何迭代(上面是放的String,系统的类)
Collection c1 = new ArrayList();
c1.add(new Student("tmac",45));//我们在添加这个Student对象时,会做一个自动类型提升
c1.add(new Student("kobe",23));// Object ob = new Student()
c1.add(new Student("jj",26));
c1.add(new Student("jjtmac",34));
Iterator it1 = c1.iterator();
while (it1.hasNext()){
Object ob = it1.next();
Student st = (Student)ob;
System.out.println(st.getName());
//我们在这里想直接调用Student对象的方法,需要将ob向下转型
System.out.println(ob);
}