集合(七)


集合(七)

集合和数组的对比

  • 长度
    • 数组长度固定
    • 集合长度可变
  • 数据类型
    • 数组可以存基本数据类型和引用数据类型
    • 集合可以存引用数组类型,要存基本数据类型需要将其变成对应的包装类

ArrayList

需要导包java.util.ArrayList。
泛型:限定集合中存储数据的类型。
创建集合对象:
ArrayList<泛型> 名称=new ArrayList<>();
:打印对象不是地址值,而是集合中存储数据内容,在打印时会拿[]将所有数据包裹。

1
2
3
4
5
6
7
8
9
public class Test{
public static void main(String[] args){
ArrayList<String> list=new ArrayList<>();
System.out.println(list);
}
}
/*
[]
*/

成员方法

add

boolean add(E e)
添加元素,返回值表示是否添加成功,一定返回true

remove

boolean remove(E e)
删除指定元素,返回值表示是否删除成功
E remove(int index)
删除指定索引的元素,返回被删除元素

set

E set(int index,E e)
修改指定索引下的元素,返回原来的元素

get

E get(int index)
获取指定索引的元素

size

int size()
求集合长度

范例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.ArrayList;
public class Test{
public static void main(String[] args){
//创建集合对象
ArrayList<String> list=new ArrayList<>();
System.out.println(list);

//添加元素
list.add("aaa");
list.add("xxx");
list.add("bbb");
list.add("ddd");
list.add("ddd");
System.out.println(list);

//删除元素
//指定元素删除
boolean flag=list.remove("xxx");
System.out.println(flag);
System.out.println(list);
//指定索引删除
String sr=list.remove(1);
System.out.println(sr);
System.out.println(list);

//修改元素
String ss=list.set(1,"ccc");
System.out.println(ss);
System.out.println(list);

//查询元素
String sg=list.get(1);
System.out.println(sg);
System.out.println(list);

//遍历元素
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
/*
[]
[aaa, xxx, bbb, ddd, ddd]
true
[aaa, bbb, ddd, ddd]
bbb
[aaa, ddd, ddd]
ddd
[aaa, ccc, ddd]
ccc
[aaa, ccc, ddd]
aaa
ccc
ddd

*/

基本数据类型对应的包装类

byte - Byte
short - Short
char - Character
int - Integer
long - Long
float - Float
double - Double
boolean - Boolean

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.ArrayList;
public class Test{
public static void main(String[] args){
ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list);
}
}
/*
[1, 2, 3]
*/

范例

例1

定义一个集合,添加一些学生对象,并进行遍历,学生类的属性为:姓名,年龄。对象数据由键盘录入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Student.java
public class Student{
private int age;
private String name;
public Student(){}
public Student(int age,String name){
this.age=age;
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//Test.java
import java.util.Scanner;
import java.util.ArrayList;
public class Test{
public static void main(String[] args){
ArrayList<Student> list=new ArrayList<>();
//1.录入数据,存入集合中
//1.1确定要录入的数据个数、
Scanner s=new Scanner(System.in);
System.out.print("请输入要创建的学生个数:");
int n=s.nextInt();
//1.2放入集合
for(int i=0;i<n;i++){
Student stu=new Student();
System.out.print("请输入名字:");
stu.setName(s.next());
System.out.print("请输入年龄:");
stu.setAge(s.nextInt());
list.add(stu);
}
//2.遍历集合
for(int i=0;i<list.size();i++){
System.out.println("第"+(i+1)+"个学生,姓名:"+list.get(i).getName()+" 年龄:"+list.get(i).getAge());
}
}
}
/*
请输入要创建的学生个数:3
请输入名字:张三
请输入年龄:18
请输入名字:李四
请输入年龄:18
请输入名字:王五
请输入年龄:19
第1个学生,姓名:张三 年龄:18
第2个学生,姓名:李四 年龄:18
第3个学生,姓名:王五 年龄:19
*/

例2

main方法中定义一个集合,存入多个用户对象,每存入一个对象前通过id判断该对象是否重复,用户属性为:id,username,password。定义一个方法,通过id查找对应的用户信息,若存在,返回true;不存在,返回false

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//User.java
public class User{
private int id;
private String username;
private String password;
public User(){}
public User(int id,String username,String password){
this.id=id;
this.username=username;
this.password=password;
}
public void setId(int id){
this.id=id;
}
public int getId(){
return id;
}
public void setUsername(String username){
this.username=username;
}
public String getUsername(){
return username;
}
public void setPassword(String password){
this.password=password;
}
public String getPassword(){
return password;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//Test.java
import java.util.Scanner;
import java.util.ArrayList;
public class Test{
public static void main(String[] args){
//创建集合
ArrayList<User> list=new ArrayList<>();
Scanner s=new Scanner(System.in);
System.out.print("请输入要录入的用户个数:");
int num=s.nextInt();
//创建对象录入数据并添加到集合
for(int i=0;i<num;){
User user=new User();
System.out.print("请输入id:");
int id=s.nextInt();
if(find(id,list)){
System.out.println("id重复,请重新输入!");
}else{
user.setId(id);
System.out.print("请输入姓名:");
user.setUsername(s.next());
System.out.print("请输入密码:");
user.setPassword(s.next());
list.add(user);
i++;
}
}
for(int i=0;i<list.size();i++){
System.out.println("第"+(i+1)+"个用户,id:"+list.get(i).getId()+" 名称:"+list.get(i).getUsername()+" 密码:"+list.get(i).getPassword());
}
}
public static boolean find(int id,ArrayList<User> list){
for(int i=0;i<list.size();i++){
if(id==list.get(i).getId()){
return true;
}
}
return false;
}
}

例3

定义javabean类:Phone。
Phone属性;品牌,价格。
main方法中定义一个集合,存入三个手机对象。
分别为:小米,1000。苹果,8000.锤子,2999。
定义一个方法,将价格低于3000的手机信息返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Phone.java
public class Phone{
private String brand;
private int price;
public Phone(){}
public Phone(String brand,int price){
this.brand=brand;
this.price=price;
}
public void setBrand(String brand){
this.brand=brand;
}
public String getBrand(){
return brand;
}
public void setPrice(int price){
this.price=price;
}
public int getPrice(){
return price;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//Test.java
import java.util.ArrayList;
public class Test{
public static void main(String[] args){
//1.创建集合
ArrayList<Phone> list=new ArrayList<>();
//2.放入数据
Phone p1=new Phone("小米",1000);
Phone p2=new Phone("苹果",8000);
Phone p3=new Phone("锤子",2999);
list.add(p1);
list.add(p2);
list.add(p3);
//3.调用方法
ArrayList<Phone> relist=getList(list);
//4.打印返回的集合
for(int i=0;i<relist.size();i++){
System.out.println("品牌:"+relist.get(i).getBrand()+" 价格:"+relist.get(i).getPrice());
}
}
public static ArrayList<Phone> getList(ArrayList<Phone> list){
ArrayList<Phone> relist=new ArrayList<>();
for(int i=0;i<list.size();i++){
if(list.get(i).getPrice()>3000){
relist.add(list.get(i));
}
}
return relist;
}
}
/*
品牌:苹果 价格:8000
*/

Author: ljs
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source ljs !
评论
  TOC