• java基础32 List集合下的ArrayList集合


    单例集合体系:

    ---------| collection  单例集合的根接口
    --------------| List  如果实现了list接口的集合类,具备的特点:有序,可重复       注:集合中的有序不是指自然顺序,而是指添加进去的顺序与出来的顺序是一致的
    ------------------| ArrayList  ArrayList底层维护了一个object数组的实现的。(线程不安全),特点:查询速度快,增删速度慢。(有序,可重复
    ------------------| LinkedList  LinkedList底层是使用链表结构实现的,线程不安全,特点:查询速度慢,增删速度快。(有序,可重复
    ------------------| Vector(了解即可)  底层也是维护一个Object数组的实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低
    --------------| Set  如果实现了set接口的集合类,具备的特点:无序,不可重复     注:集合中的无序不是指自然顺序,而是指添加元素进去的顺序与元素出来的顺序是不一致的
    ------------------| HashSet  底层是用于一个哈希表支持的。线程不安全,特点:存储速度块
    ------------------| TreeSet  底层是使用红黑树(二叉树)数据结构实现的,线程不同步(即线程不安全),不能在多线程中共享,但可以使用synchroinzedMap()方法来实现同步。特点:会对元素进行排序存储(按自然顺序

    双例集合体系:

    ----------| Map  双例集合的根接口。如果是实现了Map接口的集合类,具备的特点:存储的数据都是以键值对形式存在的,键不可重复,值可以重复
    --------------| HashMap  底层是基于哈希表实现的,HashMap允许键和值为null,线程不安全,特点:存储速度块
    --------------| TreeMap  基于红黑数(二叉树)数据结构实现的,线程不同步(即线程不安全),特点:会对元素经行排序存储
    --------------| HashTable(了解即可)   线程安全


    1、ArrayList集合

     ArrayList一些常用方法几乎和collection集合一样的

        1、 collection集合的一些常用方法

        2、 ArrayList集合的特有迭代器

      listIterator():返回列表中的列表迭代器

    2、ArrayList集合的优点 (ArrayList集合就是传说中的动态数组

      2.1、动态的增加和减少元素 
      2.2、实现了ICollection和IList接口 
      2.3、灵活的设置数组的大小

    3、ArrayList与Vector的区别

    相同点:ArrayList与Vector底层都是使用Object数组实现的.

    不同点:
        1.ArrayList是线程不同步的,操作效率高;Vector是线程同步的,操作效率低
        2.ArrayList是jdk1.2出现的,Vector是jdk1.0出现的

    4、实例

    例1

     1 package com.dhb.collection;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Iterator;
     5 
     6 /**
     7  * @author DSHORE / 2018-5-16
     8  *
     9  */
    10 public class Demo5 {
    11     public static void main(String[] args) {
    12         //创建ArrayList集合
    13         ArrayList<Object> list = new ArrayList<Object>();
    14         //添加
    15         list.add("张三");
    16         list.add("李四");
    17         list.add("王五");
    18         list.add("赵六");
    19         list.add(1,"老七");//跟下标插入元素
    20         System.out.println(list);//返回值:[张三, 老七, 李四, 王五, 赵六];说明“老七”把“李四”替换了
    21         ArrayList<Object> list2 = new ArrayList<Object>();
    22         list2.add("安其拉");
    23         list2.add("亚瑟");
    24         list2.add("赵云");
    25         list.addAll(list2);//把list2集合中的数据添加到list集合中
    26         System.out.println(list);//返回值:[张三, 老七, 李四, 王五, 赵六, 安其拉, 亚瑟, 赵云]
    27         
    28         //获取迭代器
    29         Iterator<Object> it = list.listIterator();
    30         while (it.hasNext()) { //hasNext()和next()都是迭代器(listIterator)下面的方法
    31             Object o = it.next();
    32             System.out.print(o+",");//返回值:张三,老七,李四,王五,赵六,安其拉,亚瑟,赵云,
    33         }        
    34     }
    35 }

     例2

      1 package com.dhb.collection;
      2 
      3 import java.util.ArrayList;
      4 import java.util.Collection;
      5 import java.util.Iterator;
      6 import java.util.Scanner;
      7 
      8 /**
      9  * @author DSHORE / 2018-5-17
     10  *
     11  */
     12 /*
     13  * 3:使用集合实现注册登陆功能,
     14  * 第一步: 提示用户选择功能, A(注册)  B(登陆) 。 要求: 功能选择 的时候要忽略大小写。
     15  * 注册:
     16  *     1. 提示用户输入注册的账号(数字)与密码,如果输入账号已经存在集合中,提示用户重新输入。
     17  *     注册完毕之后,把集合中的所有用户信息打印出来。
     18  * 登陆: 
     19  *     提示用户输入登陆的账号与密码,如果账号与密码这个用户已经存在集合中,那么登陆成功,否则登陆失败。
     20  * */
     21 
     22 class User{
     23     int id;//账号
     24     String passWord;//密码
     25     public User() {
     26     }
     27     public User(int id, String passWord) {
     28         super();
     29         this.id = id;
     30         this.passWord = passWord;
     31     }
     32     public int getId() {
     33         return id;
     34     }
     35     public void setId(int id) {
     36         this.id = id;
     37     }
     38     public String getPassWord() {
     39         return passWord;
     40     }
     41     public void setPassWord(String passWord) {
     42         this.passWord = passWord;
     43     }
     44     @Override
     45     public String toString() {
     46         return "User [id=" + id + ", passWord=" + passWord + "]";
     47     }
     48 }
     49 public class Demo14 {
     50     //static:把sc和coll共享了
     51     static Scanner sc = new Scanner(System.in);//创建一个扫描器
     52     static Collection<User> coll = new ArrayList<User>();//创建一个ArrayList集合      父类的引用类型指向子类的对象(多态)
     53     public static void main(String[] args) {
     54         while(true){
     55             System.out.println("请选择功能:    A(注册账号)    B(登录系统)    C(退出系统)");
     56             String option = sc.next();//option:选择  ; 扫描你输入的选项,这里用next就好。用nextInt:说明接收类型是int类型.
     57             if("A".equalsIgnoreCase(option)){//equalsIgnoreCase:忽略大小写;即:你输入小写a或大写A,都是相等的。好比:验证码
     58                 reg();//注册账号
     59             }else if("B".equalsIgnoreCase(option)){
     60                 login();//登录系统
     61             }else if("C".equalsIgnoreCase(option)){
     62                 System.out.println("已成功退出系统!");
     63                 System.exit(1);//退出虚拟机(退出系统)
     64                 //break;
     65             }else {
     66                 System.out.println("您的输入有误,请重新输入您的选项!");
     67             }
     68         }
     69     }
     70     //登录
     71     private static void login() {
     72         System.out.println("请输入您的账号:");
     73         int id = sc.nextInt();//扫描你输入的账号。因为id是int类型,所以next后面要加Int
     74         System.out.println("请输入您的密码:");
     75         String passWord = sc.next();//扫描你输入的密码。因为不是int类型,所以不用加Int
     76         //遍历集合中的元素,并查看该用户是否存在
     77         Iterator<User> it = coll.iterator();//获取迭代器
     78         boolean flag = false;//标记
     79         while (it.hasNext()){//遍历出所有元素;it.hasNext():判断集合中是否还有下一个元素。有 则返回值为true
     80             User u= (User) it.next();//遍历下一个元素
     81             if(u.id == id && u.passWord.equals(passWord)){
     82                 flag = true;
     83                 //System.out.println("登录成功...");
     84             }/*else {
     85                 System.out.println("账号或密码错误,请重新登录!");
     86             }*/
     87             if(flag == true){
     88                 System.out.println("登录成功...");
     89             }else{
     90                 System.out.println("账号或密码错误,请重新登录!");
     91             }
     92         }
     93 //        if(!coll.contains(id)){//如果coll集合不包含id,说明该账号不存在
     94 //            System.out.println("账号不存在!");
     95 //        }
     96     }
     97     //注册
     98     private static void reg() {
     99         User user = null;
    100         while (true) {
    101             System.out.println("请输入账号:");
    102             int id = sc.nextInt();
    103             user = new User(id,null);//这里只需要判断id(账号)  //将账号放到u对象里面
    104             if(coll.contains(user)){
    105                 System.out.println("该账号已存在,请重新输入!");
    106             }else {
    107                 break;//退出循环
    108             }
    109         }
    110         System.out.println("请输入密码:");
    111         String passWrod = sc.next();
    112         user.setPassWord(passWrod);//将密码放到u对象里面
    113         coll.add(user);//把u对象存储到ArrayList集合中去;这样做的目的是:保障当前注册的账号和密码的内存地址一致
    114         System.out.println("注册成功...");
    115         System.out.println("当前注册人员的账号:"+user.getId());
    116     }
    117 }

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:http://www.cnblogs.com/dshore123/p/9052617.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    模块化利器:RequireJS常用知识
    移动端适配:font-size设置的思考
    样式化复选框
    jquery tmpl 详解
    移动前端相关解决方案整理
    常用页面布局方式介绍
    移动端制作的常见问题及解决方法
    手机端页面自适应:rem布局
    React工程化之PWA之serviceWorker
    React之JSX循环遍历方法对比
  • 原文地址:https://www.cnblogs.com/dshore123/p/9052617.html
Copyright © 2020-2023  润新知