1.各类型数据存储
-
当需要在程序中记录单个数据内容时,则声明一个变量;
-
当需要在程序中记录多个类型相同的数据内容时,则声明一个一维数组;
-
当需要在程序中记录多个类型不同的数据内容时,则定义一个类(创建一个对象);
-
当需要在程序中记录多个类型相同的对象时,则声明一个对象数组即可(代码如下);
-
当需要在程序中记录多个类型不同的对象,则声明一个集合即可,集合本质上就是容器。
package cn.itxdl.day14;
public class Student {
private int id;
private String name;
private int age;
public Student() {
super();
}
public Student(int id, String name, int age) {
super();
setId(id);
setName(name);
setAge(age);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>0)
this.age = age;
else
System.out.println("年龄不合理!!!");
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
package cn.itxdl.day14;
import java.util.Scanner;
public class TestStudent {
public static void main(String[] args) {
// 1.提示用户输入学生的人数并使用变量记录
System.out.println("请输入学生人数:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
Student[] arr = new Student[num];
for(int i = 0;i<num;i++)
{
System.out.println("请输入第"+(i+1)+"个学生的信息(学号,姓名,年龄):");
String str = sc.next();
String[] strarr = str.split(",");
System.out.println("拆分出来的学号是:"+strarr[0]);
System.out.println("拆分出来的姓名是:"+strarr[1]);
System.out.println("拆分出来的年龄是:"+strarr[2]);
arr[i] = new Student(Integer.parseInt(strarr[0]),strarr[1],Integer.parseInt(strarr[2]));
}
System.out.println("----------------");
for(int i = 0;i<arr.length;i++)
{
if(arr[i].getName().startsWith("zhang"))
{
System.out.println(arr[i]);
}
}
}
}
2.数组和集合的比较
-
数组的特点
数组的本质就是一段连续的存储单元。
支持下标访问,可以实现随机访问。
数组一旦声明,则内存空间的长度固定无法更改。
数组中删除元素不方便,可能导致大量元素移动。
元素类型既可以是基本数据类型,也可以是引用数据类型。
-
集合的特点
存储单元可连续也可不连续。
部分支持下标部分不支持。
集合的长度可以动态调整。
增删元素可以不移动大量元素。
元素类型只能是引用数据类型,因此需要借助包装类。
3.集合的框架
在java语言中集合的顶层框架是:java.util.Collection接口和java.util.Map接口。
其中Collection集合中操作元素的基本单位是:单个元素。
其中Map集合中操作元素的基本单位是:单对元素。
在以后的开发中很少使用Collection集合,而是使用该集合的子集合:List集合、Queue集合、Set集合。
4.Collection集合的常用方法
boolean | add(E e) |
---|---|
用于将参数指定的元素e放入当前集合中。 |
boolean | addAll(Collection<? extends E> c) |
---|---|
用于将参数集合c中的所有元素放入当前集合中。 |
boolean | remove(Object o) |
---|---|
用于将参数指定的元素o从当前集合中删除。 |
boolean | removeAll(Collection<?> c) |
---|---|
集合c全部元素从当前集合中删除 。 |
void | clear() |
---|---|
清空当前集合中的所有元素。 |
boolean | contains(Object o) |
---|---|
用于判断当前集合中是否包含参数指定的元素o。 |
boolean | containsAll(Collection<?> c) |
---|---|
用于判断当前集合中是否包含参数c中的所有元素。 |
boolean | isEmpty() |
---|---|
用于判断当前集合是否为空。 |
int | size() |
---|---|
返回集合中元素个数。 |
boolean | retainAll(Collection<?> c) |
---|---|
用于计算调用集合和参数集合之间的交集并保留到当前集合覆盖原有数据。 | |
当前集合若发生改变则返回true,否则返回false。 |
package cn.itxdl.day14;
import java.util.ArrayList;
import java.util.Collection;
public class TestCollection {
public static void main(String[] args) {
Collection c1 = new ArrayList();
boolean b1 = c1.add(new Integer(1));
c1.add(new String("t"));
c1.add(new Student(1001,"zhang",100));
Collection c2 = new ArrayList();
c2.add(new Integer(1));
c2.add(new Integer(129));
c2.add(new String("addsaas"));
c1.add(c2);//添加单个元素(这里元素为一个集合)
c1.addAll(c2);//添加整个集合中的元素
// c1.add(null);
System.out.println(b1);
System.out.println(c1);
boolean b2 = c1.contains(c2);
b2 = c1.contains(new Integer(1));
b2 = c1.contains(new String("addsaas"));
b2 = c1.contains(new Student(1001,"zhang",100));
b2 = c1.containsAll(c2);
System.out.println(b2);
System.out.println("-------------");
c1.remove(1);
c1.remove(1);
int z = c1.size();
System.out.println(c1+" "+z);
System.out.println(c1);
System.out.println(c2);
boolean o = c1.retainAll(c2);
System.out.println(o+" "+c1);
c1.clear();
System.out.println(c1);
boolean b = c1.isEmpty();
System.out.println(b);
}
}