疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java基础ArrayList集合详解


 

 
集合出现的原因
数组存储数据是固定存储 ,当遇到要存储数据的个数不确定的时候 数组就不满足了,集合就出现了 
集合存储数据的个数,可以随着数据量的变化而变化,不会造成越界或者大量的空间浪费 
存储数据的个数是可变的 
 
ArrayList: 
java.util包下 
底层维护了一个数组
线程不同步(处理速度快)
 
创建ArrayList对象的格式: 
ArrayList<E> 集合名字 = new ArrayList<E>(); 
<E>: 泛型, 代表了集合中要存储的数据类型, 想存什么类型 就把E改成什么类型 , 如要存储String类型的数据 就把E改成String
 
 
注意: 集合只能存储引用类型的数据 
 
 
基本数据类型 对应的引用数据类型表示形式
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
 
ArrayList常见功能
添加
public boolean add(E e)
public void add(int index,E element) // 在指定的索引位置添加元素 
 
获取元素
public E get(int index)// 根据索引值获取元素
 
 
获取元素个数
public int size() //获取元素个数
 
删除元素
public boolean remove(Object o) // 直接删除元素 
public E remove(int index) //根据索引删除元素 ,并把删除的元素返回 
 
修改元素
public E set(int index,E element)// 使用element 去替换指定索引的元素 , 并返回被替换的元素
 
学生管理系统练习
学生信息包括 : 学号 姓名 年龄 家乡 
打印欢迎语句 
打印对应的功能 , 并接收用户的输入 
 
1.查看学生信息
如果系统没有学生信息 则给出对应的提示 
如果系统中有学生信息, 则按照指定的格式打印学生信息 
2.添加学生信息
从键盘录入学生的信息 组成对象 添加到集合中
根据学号去重,只有没重复的学号才能添加到集合中
 
3.修改学生信息
根据学号找到学生进行修改
如果没有学号则给出对应的提示 
如果找到学号则继续收集新信息, 使用新信息修改原来的元素 
4.删除学生信息
根据学号删除学生 
如果没有指定学号则给出指定的提示
如果有学号则删除指定的元素
5.退出学生信息管理系统
提示退出
并结束程序 
代码演示
复制代码
  1 public static void main(String[] args) {
  2         // 初始化数据
  3         // 创建一个集合容器 可以存储学生的信息
  4         ArrayList<Student> list = new ArrayList<Student>();
  5         // =========================测试数据================================
  6 //        Student s1 = new Student("9001", "阿拉甲", "18", "迪拜");
  7 //        Student s2 = new Student("9002", "阿拉yi", "18", "迪拜");
  8 //        Student s3 = new Student("9003", "阿拉饼", "18", "迪拜");
  9 //        list.add(s1);
 10 //        list.add(s2);
 11 //        list.add(s3);
 12 //        System.out.println("初始化完毕");
 13         // =========================测试数据================================
 14 
 15         System.out.println("-------------------欢迎使用学生管理系统------------------------");
 16 
 17         // 死循环
 18         while (true) {
 19             // 展示功能菜单
 20             System.out.println("=================================");
 21             System.out.println("1.查看学生信息");
 22             System.out.println("2.添加学生信息");
 23             System.out.println("3.修改学生信息");
 24             System.out.println("4.删除学生信息");
 25             System.out.println("5.退出学生信息管理系统");
 26             System.out.println("请输入对应功能的序号");
 27             System.out.println("=================================");
 28             // 接收用户的输入
 29             Scanner sc = new Scanner(System.in);
 30             int user = sc.nextInt();
 31             // 根据用户的输入进行功调用
 32             switch (user) {
 33             case 1:
 34                 show(list);
 35                 break;
 36             case 2:
 37                 add(list);
 38                 break;
 39             case 3:
 40                 upd(list);
 41                 break;
 42             case 4:
 43                 del(list);
 44                 break;
 45             case 5:
 46                 System.out.println("感谢使用管理系统 欢迎下次再来哦  ");
 47                 // 终止虚拟机
 48                 System.exit(0);
 49                 // return;
 50                 break;
 51 
 52             default:
 53                 System.out.println("对不起 没有这个功能 ,请控制你自己 ");
 54                 break;
 55             }
 56         }
 57     }
 58 
 59     // 功能方法s
 60     public static void del(ArrayList<Student> list) {
 61         // 1.提示输入学号
 62         Scanner sc = new Scanner(System.in);
 63         System.out.println("请输入学号");
 64         String id = sc.next();
 65 
 66         // 2.查找
 67         // 定义标记
 68         int index = -1;
 69         // 遍历比较 并修改
 70         for (int i = 0; i < list.size(); i++) {
 71             Student tmp = list.get(i);
 72             if (tmp.getId().equals(id)) {
 73                 // 找到了
 74                 // 改变标记
 75                 index = i;
 76                 break;
 77             }
 78         }
 79         // 3.判断结果
 80         // 判断标记
 81         if (index == -1) {
 82             // 没有找到
 83             System.out.println("您输入的学号 咱们系统没有, 请重新选择功能");
 84         } else {
 85             // 找到了 执行删除
 86             list.remove(index);
 87             System.out.println("删除完毕");
 88         }
 89     }
 90 
 91     public static void upd(ArrayList<Student> list) {
 92         // 1.提示输入学号
 93         Scanner sc = new Scanner(System.in);
 94         System.out.println("请输入学号");
 95         String id = sc.next();
 96 
 97         // 2.查找
 98         // 定义标记
 99         int index = -1;
100         // 遍历并比较
101         for (int i = 0; i < list.size(); i++) {
102             Student tmp = list.get(i);
103             if (tmp.getId().equals(id)) {
104                 // 找到了
105                 // 修改标记
106                 index = i;
107                 break;
108             }
109         }
110         // 3.根据查找的结果做不同的动作
111         // 判断标记
112         if (index == -1) {
113             // 没找到,
114             System.out.println("您输入的学号 咱们系统中没有 ,请重新选择功能 ");
115         } else {
116             // 找到了
117             // 3.收集其他信息
118             System.out.println("请输入新姓名");
119             String name = sc.next();
120             System.out.println("请输入新年龄");
121             String age = sc.next();
122             System.out.println("请输入新家乡");
123             String home = sc.next();
124             // 4.组成对象添加到集合中
125             Student s = new Student(id, name, age, home);
126             // 修改
127             list.set(index, s);
128             System.out.println("修改完毕");
129         }
130 
131     }
132 
133     public static void add(ArrayList<Student> list) {
134         // 1.提示输入学号
135         Scanner sc = new Scanner(System.in);
136         System.out.println("请输入学号");
137         String id = sc.next();
138         // 2.根据学号去重
139 
140         // 使用用户输入的学号去集合中查找, 如果找到与用户输入的学号一样的学号表示有重复,此时要继续提示输入学号,并继续去重
141         // 直到用户输入的学号与集合中元素的学号不一致的时候再收集其他的信息
142         while (true) {
143             // 定义一个标记 给一个默认值
144             int index = -1;
145             // 遍历集合获取元素的学号与用户输入的学号进行比较
146             for (int i = 0; i < list.size(); i++) {
147                 Student tmp = list.get(i);
148                 if (tmp.getId().equals(id)) {
149                     // 表示重复
150                     // 修改标记
151                     index = i;
152                     break;
153                 }
154             }
155 
156             // 判断标记
157             if (index == -1) {
158                 // 没有重复
159                 break;
160             } else {
161                 // 有重复
162                 System.out.println("您输入的学号 重复了 ,请重新输入学号 ");
163                 id = sc.next();
164 
165             }
166         }
167 
168         // 3.收集其他信息
169         System.out.println("请输入姓名");
170         String name = sc.next();
171         System.out.println("请输入年龄");
172         String age = sc.next();
173         System.out.println("请输入家乡");
174         String home = sc.next();
175         // 4.组成对象添加到集合中
176         Student s = new Student(id, name, age, home);
177         list.add(s);
178         System.out.println("添加完毕");
179     }
180 
181     public static void show(ArrayList<Student> list) {
182         // 1.判断集合是否有元素
183         if (list.size() == 0) {
184             // 如果没有给出特定的提示
185             System.out.println("系统中没有学生的信息,请选择添加功能");
186         } else {
187             // 如果有就按照指定格式遍历
188             System.out.println("================学生信息如下====================");
189             System.out.println("学号 姓名 年龄 家乡");
190             // 遍历集合获取学生信息
191             for (int i = 0; i < list.size(); i++) {
192                 Student tmp = list.get(i);
193                 System.out
194                         .println(tmp.getId() + " " + tmp.getName() + " " + tmp.getAge() + " " + tmp.getHome());
195             }
196             System.out.println("====================================");
197         }
198         System.out.println("展示完毕");
199     }