集合(七) 集合和数组的对比
长度
数据类型
数组可以存基本数据类型和引用数据类型
集合可以存引用数组类型,要存基本数据类型需要将其变成对应的包装类
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 */