单例集合体系:
---------| 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集合一样的
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 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |