java集合 ArrayList问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java集合 ArrayList问题相关的知识,希望对你有一定的参考价值。

代码如下:

ArrayList list = new ArrayList(50);

for(int i = 0; i < 50; i++)

list.add(new Integer((int)(41 * Math.random() + 10)));


System.out.println(list);

输出结果:[37, 16, 22, 44, 11, 33, 45, 45, 20, 24, 10, 30, 21, 33, 25, 28, 11, 33, 13, 14, 43, 26, 14, 15, 18, 21, 13, 25, 48, 37, 38, 10, 49, 25, 46, 49, 16, 47, 44, 10, 50, 38, 15, 23, 24, 28, 41, 41, 18, 41]

请问为什么是这个结果啊?

list是一个引用,System.out.println(list); ArrayList没有重写toString()方法, 这一行不是应该调用Object 的toString()方法,输出类名和地址吗?

另外如果我这样写System.out.println(list.get(10)); 也可以得到正确结果。 我放进去的是Integer包装类,取出来的应该也是Integer类吧? 但是为什么不需要用intValue()方法就可以直接得到正确结果?

请大家帮帮忙,谢谢了。

ArrayList 继承了 AbstractList ;AbstractList 继承 AbstractCollection; AbstractCollection中重写了toString()方法,所以可以直接打印。
从JDK 1.5开始,java有了自动打包,自动解包功能,Interger 对象可以直接自动转换成int,也就是说8中基本类型可以跟对应的基本类对象之间自动转换。
参考技术A (int)(41 * Math.random() + 10) 这部分转成了int 类型而new Integer((int)(41 * Math.random() + 10))这部分就把他转成intger类型
你输出的是list值是object类型的吧
参考技术B ArrayList的toString()方法继承于AbstractCollection类的toString()方法(方法内容Returns a string representation of this collection. The string representation consists of a list of the collection's elements in the order they are returned by its iterator, enclosed in square brackets ("[]"). Adjacent elements are separated by the characters ", " (comma and space). Elements are converted to strings as by String.valueOf(Object). ),而不是你所说的Object的toString()方法,至于后面那个问题,我觉得list.get()取出来的事integer类,然后系统println()方法调用了integer的toString()方法(方法内容Returns a String object representing this Integer's value)。 参考技术C JDK5·0之后具有自动打包和解包功能,你查查这两个概念。

JAVA集合 - ArrayList

集合可实现增删改查,下面的项目用ArrayList集合来做实例,ArrayList集合几个常用的函数

  .size()  集合大小

  .add()  添加对象到集合

  .remove() 删除集合的对象

    用到的其他函数

  .equals()   字符串比较

  System.exit(-1)    退出系统,非零

  1 /*
  2  * 作者:白客C
  3  * 时间:2020年02月28日
  4  * 内容:简单员工管理系统
  5  */
  6 
  7 package com.beekc.www;
  8 import java.io.*;
  9 import java.util.*;
 10 
 11 public class Beekc {
 12     public static void main(String[] args) throws Exception{
 13 
 14         //创建EmpManage
 15         EmpManage em = new EmpManage();
 16 
 17         //输入流
 18         InputStreamReader isr = new InputStreamReader(System.in);
 19         BufferedReader br = new BufferedReader(isr);
 20 
 21         //简易菜单
 22         em.menu();
 23         while (true)
 24         {
 25 
 26             System.out.print("请选择你要进行的操作:");
 27             //接收选择项
 28             String operType = br.readLine();
 29 
 30             if (operType.equals("1")) {
 31 
 32                 System.out.print("请输入编号:");
 33                 String empNo = br.readLine();
 34                 System.out.print("请输入名字:");
 35                 String name = br.readLine();
 36                 System.out.print("请输入工资:");
 37                 Float sal = Float.parseFloat(br.readLine());
 38 
 39                 Emp emp =new Emp(empNo,name,sal);
 40                 em.addEmp(emp);
 41 
 42             }else if (operType.equals("2"))
 43             {
 44                 System.out.print("请输入编号:");
 45                 String empNo = br.readLine();
 46                 em.showInfo(empNo);
 47 
 48             }else if (operType.equals("3"))
 49             {
 50                 System.out.print("请输入编号:");
 51                 String empNo = br.readLine();
 52                 System.out.print("请输入新工资:");
 53                 Float sal = Float.parseFloat(br.readLine());
 54                 em.updateSal(empNo,sal);
 55 
 56             }else if (operType.equals("4"))
 57             {
 58                 System.out.print("请输入编号:");
 59                 String empNo = br.readLine();
 60                 em.delEmp(empNo);
 61 
 62             }else if (operType.equals("5"))
 63             {
 64                 em.showAll();
 65             }
 66         }
 67     }
 68 }
 69 
 70 //雇员管理类
 71 class EmpManage{
 72     private ArrayList al = null;
 73 
 74     //构造函数
 75     public EmpManage()
 76     {
 77         al = new ArrayList();
 78     }
 79 
 80     //菜单
 81     public void menu()
 82     {
 83         System.out.println("1.添加一个雇员");
 84         System.out.println("2.查找一个雇员");
 85         System.out.println("3.修改一个雇员工资");
 86         System.out.println("4.删除一个雇员");
 87         System.out.println("5.查询所有雇员");
 88     }
 89 
 90     //加入员工
 91     public void addEmp(Emp emp)
 92     {
 93         //添加对象到集合
 94         al.add(emp);
 95     }
 96 
 97     //显示员工信息
 98     public void showInfo(String empNo)
 99     {
100         //遍历整个ArrayList
101         for(int i = 0 ; i < al.size() ; i++)
102         {
103             //取出Emp对象
104             Emp emp =(Emp)al.get(i);
105 
106             //比较编号,注意字符串比较用equals()
107             if(emp.getEmpNo().equals(empNo))
108             {
109                 System.out.println("该员工信息是:");
110                 System.out.println("编号:" + empNo);
111                 System.out.println("名字:" + emp.getName());
112                 System.out.println("工资:" + emp.getSal());
113             }
114         }
115     }
116 
117     //显示所有员工信息
118     public void showAll()
119     {
120         for(int i = 0 ; i < al.size() ; i++)
121         {
122             System.out.print("编号	");
123             System.out.print("姓名	");
124             System.out.println("工资");
125         }
126 
127         for(int i = 0 ; i < al.size() ; i++)
128         {
129             Emp emp = (Emp)al.get(i);
130             System.out.print(emp.getEmpNo() + "		");
131             System.out.print(emp.getName() + "		");
132             System.out.println(emp.getSal());
133         }
134     }
135 
136     //修改员工薪水
137     public void updateSal(String empNo ,float newSal)
138     {
139         for(int i = 0 ; i < al.size() ; i++)
140         {
141             Emp emp = (Emp)al.get(i);
142             if(emp.getEmpNo().equals(empNo))
143             {
144                 //修改成功
145                 emp.setSal(newSal);
146             }
147         }
148     }
149 
150     //删除员工
151     public void delEmp(String empNo)
152     {
153         for(int i = 0 ; i < al.size() ; i++)
154         {
155             Emp emp = (Emp)al.get(i);
156             if(emp.getEmpNo().equals(empNo))
157             {
158                 //删除集合里的对象
159                 al.remove(i);
160                 //al.remove(emp);
161             }
162         }
163     }
164     //--------------------------
165 }
166 
167 //雇员类
168 class Emp{
169     //学号
170     private String empNo;
171     //姓名
172     private String name;
173     //薪水
174     private float sal;
175 
176     //构造函数
177     public Emp(String empNo, String name, float sal)
178     {
179         this.empNo = empNo;
180         this.name = name;
181         this.sal = sal;
182     }
183 
184     public String getEmpNo() {
185         return empNo;
186     }
187 
188     public void setEmpNo(String empNo) {
189         this.empNo = empNo;
190     }
191 
192     public String getName() {
193         return name;
194     }
195 
196     public void setName(String name) {
197         this.name = name;
198     }
199 
200     public float getSal() {
201         return sal;
202     }
203 
204     public void setSal(float sal) {
205         this.sal = sal;
206     }
207 }

 

以上是关于java集合 ArrayList问题的主要内容,如果未能解决你的问题,请参考以下文章

Java集合类之ArrayList

java集合问题

Java集合ArrayList的应用

在java中怎样求多个arraylist集合的交集?

Java中请说明集合类ArrayList与 HashMap的区别?

JAVA集合 - ArrayList