集合
问:为什么要有集合?
集合其实也是一个容器,用来存储数据的。
变量:只能存储一个值,当存第二个的时候,会把第一个给覆盖。
数组:能同时存储多个值,但是长度不能发生改变。
StringBuilder : 一般只把他当做是String的缓冲区,就是字符串的帮助类。只往StringBuilder里面存储字符串。
集合:跟数组类似的。
能同时存储多个值,但是长度会自动的伸缩。
简单来说,我们在添加元素或者删除元素的时候,不需要考虑集合的长度,因为他会自动伸缩。
8,集合的特点:
1.长度可变的。
2.底层是数组。
在刚开始创建集合对象的时候
a,在底层会先创建一个数组。
b,此时往集合中添加数据,其实就是往这个数组中添加数据
c,当数组存满了,集合会自动的,再创建一个更长一点的数组,把老数组中的元素添加到新数组中。
//注意:这个扩容的过程不需要我们自己实现,是集合帮我们搞定了
// 我们只要关心添加的数据即可。
3.泛型
就是规定了集合能存储数据的类型。
int [] arr = new int[3]; //可以得出数组能存int数据类型。
ArrayList list = new ArrayList();//通过集合的创建对象,能不能看出这个集合能存储什么数据类型?
//此时是看不出来的,所以我们要明确的规定一下数据类型。
//就通过泛型去明确
改写:
ArrayList<String> list = new ArrayList<String>();
//此时加了泛型,就表示以后只能往集合中存储这种数据类型。
在JDK7以后,可以简写:
ArrayList<String> list = new ArrayList<>();
9,ArrayList构造,添加
构造:
ArrayList<String> list = new ArrayList<>();
添加:
add(元素); //默认将元素添加末尾
add(索引,元素);//将元素添加到指定的位置,原来位置上的元素往后挪一个位置。
10.集合的遍历
扩展练习:
往集合中添加以下的元素:
"张三" "李四" "张三丰" "张无忌" "张帅玮" "赵六" "钱七"
请遍历集合,请将张开头,且名字为3个字的遍历出来。
代码:
//"张三" "李四" "张三丰" "张无忌" "张帅玮" "赵六" "钱七"
//请遍历集合,请将张开头,且名字为3个字的遍历出来。
ArrayList<String> list = new ArrayList<>();//创建了一个空的集合,里面没有任何元素
list.add("张三");
list.add("李四");
list.add("张三丰");
list.add("张无忌");
list.add("张帅玮");
list.add("赵六");
list.add("钱七");
//当代码执行到这里时,所有的数据都已经存储到集合中了。
for (int i = 0; i < list.size(); i++) {
String name = list.get(i);//name依次表示集合中的每一个名字
if(name.startsWith("张") && name.length() == 3){
System.out.println(name);
}
}
11.存储自定义学生对象并进行遍历
ArrayList<Student> list = new ArrayList<>();
Student s1 = new Student("张三",23);
Student s2 = new Student("李四",24);
Student s3 = new Student("王五",25);
list.add(s1);
list.add(s2);
list.add(s3);
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
student.show();
}
扩展练习:
只要打印年龄大于等于24岁的。
ArrayList<Student> list = new ArrayList<>();
Student s1 = new Student("张三",23);
Student s2 = new Student("李四",24);
Student s3 = new Student("王五",25);
list.add(s1);
list.add(s2);
list.add(s3);
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
//遍历到的当前学生的年龄
int age = student.getAge();
if(age >= 24){
student.show();
}
}
12.存储自定义学生对象并进行遍历,数据来自于键盘录入
思考:
在javabean类Student类中,name和age都使用的String类型。
为什么?
因为如果name是String类型的,age是int类型的。
那么键盘录入时,就需要用nextLine和nextInt结合的方式了。
有可能会导致一个小问题。先用nextInt接收数据,再用nextLine接收数据,会导致nextLine接收不到。
结论:
在基础班是使用 next 和 nextInt
//到了就业班学习完了类型的转换再使用nextLine
如果你想Student类中,姓名用String ,age用int
那么键盘录入就必须使用 next 和 nextInt
|
|