利用ArrayList

1、存储多个员工信息,包括工号,姓名,年龄,入职时间,逐条打印所有员工姓名,并输出员工个数。

package CollectionPart;

import java.util.ArrayList;
import java.util.List; public class ArrayListPractise_1 { public static void main(String[] args) { Employee_1 e1 = new Employee_1("dept1_001", "lifei", 24, "2016-03-28");
Employee_1 e2 = new Employee_1("dept1_002", "li2fe", 23, "2015-01-22");
Employee_1 e3 = new Employee_1("dept1_003", "lifei3", 28, "2016-02-05");
Employee_1 e4 = new Employee_1("dept2_001", "lif4i", 25, "2017-03-28"); List<Employee_1> myList1 = new ArrayList();
myList1.add(e1);
myList1.add(e2);
myList1.add(e3);
myList1.add(e4); for (Employee_1 employee_1 : myList1) {
System.out.println(employee_1.getEmployeeName());
}
System.out.println("员工总个数为:"+myList1.size()); } }
package CollectionPart;

public class Employee_1 {

    private String employeeId;
private String employeeName;
private int employeeAge;
private String employeeHireDate;
/*
这里就存储成String 类型,在 数据库里面设置成 date格式。
然后 利用Date today = new Date();
SimpleDateFormat fm = new SimpleDateFormat("YYYY-MM-dd");
来做
*/
public String getEmployeeId() {
return employeeId;
}
public void setEmployeeId(String employeeId) {
this.employeeId = employeeId;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public int getEmployeeAge() {
return employeeAge;
}
public void setEmployeeAge(int employeeAge) {
this.employeeAge = employeeAge;
}
public String getEmployeeHireDate() {
return employeeHireDate;
}
public void setEmployeeHireDate(String employeeHireDate) {
this.employeeHireDate = employeeHireDate;
}
@Override
public String toString() {
return "Employee_1 [employeeId=" + employeeId + ", employeeName=" + employeeName + ", employeeAge="
+ employeeAge + ", employeeHireDate=" + employeeHireDate + "]";
}
public Employee_1(String employeeId, String employeeName, int employeeAge, String employeeHireDate) {
super();
this.employeeId = employeeId;
this.employeeName = employeeName;
this.employeeAge = employeeAge;
this.employeeHireDate = employeeHireDate;
}
public Employee_1() {
super();
} }

练习2:

当有员工入职时添加,员工信息,当有员工离职时,删除该信息。

示例代码:【有bug,在 输入日期的时候,没等到输入日期,就直接询问是否还有入职的同志】

下面算是 为 解决 ConcurrentModificationException 提出了一个 方案。就是 得到 当前元素的 下标然后再删除。下面的代码没有怎么写注释,如果有问题的话欢迎讨论。

package CollectionPart;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class ArrayListPractise_2 { public static void main(String[] args) {
ArrayListPractise_2 ap2 = new ArrayListPractise_2(); List<Employee_1> myList = new ArrayList();
System.out.println("是否有员工入职?");
Scanner in = new Scanner(System.in);
String string = in.nextLine();
while(string.equals("是")){
System.out.println("请输入员工的编号");
String id = in.nextLine();
System.out.println("请输入员工的姓名");
String name = in.nextLine();
System.out.println("请输入员工的年龄");
int age = in.nextInt();
System.out.println("请输入员工的入职时间");
String hireDate = in.nextLine();
System.out.println("?");
Employee_1 e1 = new Employee_1(id, name, age, hireDate);
myList.add(e1);
System.out.println("是否还有新员工入职?");
string = in.nextLine();
} System.out.println("共有员工:"+myList.size()+"人"); List<Employee_1> newList =null;
System.out.println("是否有员工离职?");
string = in.nextLine();
while(string.equals("是")){
System.out.println("该员工的姓名是");
String name = in.nextLine();
newList = ap2.deleteFromTheList(myList,name);
System.out.println("是否还有员工离职?");
string = in.nextLine();
}
for (Employee_1 employee_1 : newList) {
System.out.println("员工人数为:"+newList.size());
} } private List<Employee_1> deleteFromTheList(List<Employee_1> myList, String name) { int index = 0;
boolean hasTheElement = false;
for(int i = 0; i<myList.size();i++){
if(myList.get(i).getEmployeeName().equals(name)){
index = i;
hasTheElement = true;
}
}
if(!hasTheElement){
System.out.println("不存在此元素");
}else{
myList.remove(index);
}
return myList;
} }

ArrayList 和 LinkedList 分别在什么时候使用?

ArrayList,在遍历元素和随机访问元素时效率会比较高,在插入删除操作情况下效率会比较低

LinkedList,在插入和删除时效率会比较高,但是在 查找时效率会比较低

与一个 很相像的比较 Vector。

两者 拥有的方法是一样的。就是一个镜像一样的存在。唯一区别在于同异步。

Vector是线程安全的,也就是说,在多线程操作的时候他仍然是可靠地,当A个线程对其进行操作的时候,其他任何线程不允许访问,当A线程完成访问以后,其他线程获得访问该集合的权限。而对于ArrayList来说,他是线程不安全的,就是 在线程A在访问ArrayList的时候,别的线程也可以访问的,这样就会不安全。

那么为什么不安全的反而应用更广,因为多个线程可以访问,那么执行效率就高,访问速度就快,所以 在效率上ArrayList扳回一城,在两者的取舍过程中,大家倾向于效率,所以 ArrayList更加火爆。

同样的 既然牵扯到了这个 问题 那就 连带说一下 Stringbuffer 和 StringBuilder

两者 也是镜像般存在的。

StringBuffer 是线程安全的。StringBuilder 是不安全的。

但是 在使用上,我们利用StringBuffer更多一些。猜想,因为 异步的关系,我们希望得到更加靠谱的字符串。如果考虑到正确性的问题还是需要为stringBuilder加上同步锁。所以就干脆直接使用StringBuffer了。

此处为引用:

这个 参考 百度知道的一个文献吧:

1.  在执行速度方面的比较:StringBuilder >  StringBuffer   
2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。
3. StringBuilder:线程非安全的
  StringBuffer:线程安全
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。 对于三者使用的总结:1.如果要操作少量的数据用 = String
       2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
       3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer 引用结束。
附网址链接:http://zhidao.baidu.com/link?url=NdcmurUXZeD30zVPk5o---5Gj0WmSR-9whPpal4Ln_mWC6E1gIq41Ndk3N7QI3APLGOabr7QNNh_T6fGYypHM_

集合练习——List部分的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. .Net多线程编程—并发集合

    并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...

  3. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  4. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  5. java基础_集合List与Set接口

    List接口继承了Collection的方法  当然也有自己特有的方法向指定位置添加元素   add(索引,添加的元素); 移除指定索引的元素   remove(索引) 修改指定索引的元素   set ...

  6. Java基础Collection集合

    1.Collection是所有集合的父类,在JDK1.5之后又加入了Iterable超级类(可以不用了解) 2.学习集合从Collection开始,所有集合都继承了他的方法 集合结构如图:

  7. 轻量级“集合”迭代器-Generator

    Generator是PHP 5.5加入的新语言特性.但是,它似乎并没有被很多PHP开发者广泛采用.因此,在我们了解PHP 7对Generator的改进之前,我们先通过一个简单却显而易见的例子来了解下G ...

  8. Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合

    今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...

  9. 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)

    在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台 ...

  10. python 数据类型 --- 集合

    1. 注意列表和集合的区别 set 列表表现形式: list_1 = [1,3,4];  集合表现形式:set_1= set() list_1 = [1,2,3,4,23,4,2] print(lis ...

随机推荐

  1. Oracle EBS R12 WIP Component Issue&Return Process

    oracleassemblytransactionscomponentsjobsreference 目录(?)[-] 定义BOM 定义Routing 定义WIP Discrete Job 发料 Mat ...

  2. .NET的类型层次查看工具

    上周为了快速了解一个.NET的库而需要查看其类型层次.假如要在文章中表示一个类型层次,还是用文本比较舒服,截图始终是不方便.Reflector虽然能够显示类型层次,但我无法方便的把显示出来的类型层次转 ...

  3. ORACLE RAC NTP 时间服务器配置

    Linux 时间同步配置 . 一. 使用ntpdate 命令 1.1 服务器可链接外网时 # crontab -e 加入一行: */1 * * * * ntpdate 210.72.145.44 21 ...

  4. MySQL问题集绵

    1.MYSQL can't create table(errno:150) 详细:[Err] 1005 - Can't create table '.\ejforum\ejf_attach.frm' ...

  5. WCF大数据量传输解决方案

    文章内容列表:1. 场景:2. 解决方案3. WCF契约与服务实现设计静态图4. WCF契约与服务实现设计详细说明6. 服务端启动服务代码:7. 客户端代码8.   WCF大数据量传输解决方案源码下载 ...

  6. (转载)file_get_contents("php://input")

    (转载)http://taoshi.blog.51cto.com/1724747/1165499 $data = file_get_contents("php://input"); ...

  7. EF架构随心所欲打造属于你自己的DbModel【转】

    前言 我们都知道EF可以生成Dbmodel,系统生成的Model有时候并不是我们想要的,如何我们要生成自己的Model,那么久需要我们手动的去修改T4模版,T4是对“Text Template Tra ...

  8. [洛谷1580]yyy loves Easter_Egg I

    题目背景 Soha的出题效率着实让人大吃一惊.OI,数学,化学的题目都出好了,物理的题还没有一道.于是,Huntfire,absi2011,lanlan对soha进行轮番炸,准备炸到soha出来,不料 ...

  9. 【JS】Intermediate2:Events and Callbacks

    event-driven :waiting for and reacting to events 2.page loads, user interacts (clicks, hovers, chang ...

  10. Win8关机 一直重启的问题 解决方案-摘自网络

    win8关机时自动重启的解决方法:关闭快递启动,默认是启动的,到控制面板 – 电源选项 – 选择电源按钮的功能 – 更改当前不可用的设置 – 关机设置 – 把勾去掉 关闭快速启动.这样就不会关机一直重 ...