Java学习第14天:集合框架零接触和基本理解(List和Set)
来源:互联网 发布:excel筛选重复数据个数 编辑:程序博客网 时间:2024/06/05 20:39
Until14
集合框架
1、体系概念
2、共性方法
3、迭代器
4、List集合共性方法
5、Vector的枚举
6、LinkedList
7、练习
8、练习
9、练习
10、HashSet
11、HashSet存储自定义对象
12、HashSet判断和删除的依据
体系概念
为什么出现集合类?(为了存储对象)
面向对象语言对食物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
数组和集合类同时容器,不同的地方在哪?(存的东西和长度不同)
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的
数组中可以存储基本数据类型,集合只能存储对象
集合类的特点(值存对象,长度可变)
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象
为什么会出现这么多容器分类?
因为每一个容器对数据的存储方式不同!我们称之为:数据结构
共性方法
需求
方法
注解
添加元素
Add
Add方法中的参数内省是obj,这样可以添加不同类型的值
获取长度
Size
删除元素
Remove
清空集合
Clear
判断元素
Cointains
removerAll
删除交集
retainAll
去交集
迭代器
public class Demo_01 { public static void main(String[] args) {// 集合迭代器ArrayList<String> al = new ArrayList<String>();al.add("java01");al.add("java02");al.add("java03");Iterator<String> it = al.iterator();while(it.hasNext()){System.out.println(it.next());}} }
List集合共性方法
List集合是有序可重复的(因为有索引)
Set集合是无序比且元素不可以重复
【有序无序是存入和去除顺序不一定】
List的特有方法其实就是对角标的操作(获取get,修改是set)
需求
方法
注解
添加
Add(index,element);
addAll(index,collection)
删除
Remove(index)
修改
Set(index,element)
查找
Get(index);
subList(from,to);
listIterator()
Iterator有三个方法...hasNext \ next \ remove
List中有它特有的迭代器:ListIterator(可以进行添加add、设置set等操作)
它是iterator的子接口来的!
迭代时,不能用集合对象的方法操作集合中的元素!
会发生ComcumentModificationException异常!
hasPrevious 前面是否有元素
hasNext 后面是是否有元素
集合
注释
注释
是否同步
ArrayList
底层使用数组结构
查找快、操作慢
不同步
LinkList
底层使用链表结构
查找慢、操作块
同步
Vector
和LinkList数据结构相同
同步
Vector的枚举
枚举是Vector特有的迭代去除方式:Enumeration
public class Demo_2_Vector { public static void main(String[] args) {// 演示下Vector特有的去除方式Vector<String> v = new Vector<String>();v.add("Java1");v.add("Java2");v.add("Java3");//特有的过时迭代器!感觉名字好长·用起来也不方便Enumeration<String> e = v.elements();while(e.hasMoreElements()){System.out.println(e.nextElement());}} }
LinkedList
需求
方法(1.6前)
方法
注解
添加
addFrist();
addLast();
offerFrits();
offerLast();
删除
removeFrits();
removeLats();
pollFrits();
poolLast();
打印并且移除!
查找
getFrist();
getLats()
peekFrits();
peekLats();
如果集合中的没有需要的元素在1.6版本之前是返回NoSuchElementsException异常,1.6之后是返回Null值
练习
1、
public class Demo_Collection_LinkList { /** *使用LinkList模拟一个堆栈火队列数据结构堆栈:先进后出(如果杯子)队列:先进先出(如同水管) */public static void main(String[] args) {LinkedList<String> ll = new LinkedList<String>();//堆栈ll.addFirst("java_01");ll.addFirst("java_02");ll.addFirst("java_03");Iterator<String> it = ll.iterator();while(it.hasNext()){System.out.println(it.next());}LinkedList<String> l = new LinkedList<String>();//队列l.addLast("java_01");l.addLast("java_02");l.addLast("java_03");Iterator<String> itt = l.iterator();while(itt.hasNext()){System.out.println(itt.next());}} }
2、
public class Demo_Collection_ArrayList { /** * 去除ArrayList中重复元素注意:在写next()的时候不能同时写两次! 若不先进行判断,是无法知道下一个角标是否有元素的!会报错 */public static void main(String[] args) {ArrayList<String> al = new ArrayList<String>();al.add("java_01");al.add("java_01");al.add("java_02");al.add("java_02");al.add("java_03");al.add("java_04");System.out.println(al);al = singleElement(al);System.out.println(al);}public static ArrayList singleElement(ArrayList al){ArrayList<String> temp = new ArrayList<String>();Iterator<String> it = al.iterator();while(it.hasNext()){String s = it.next();if(!temp.contains(s))temp.add(s);}return temp;} }
3、
public class Deno_Collection_Array { /** * 自定义对象作为元素存到ArrayList中,并去除重复元素 假如:自定义一个Person对象!同名同岁的十一个人!Instanceof() 类型判断方法 覆写equals()方法【该方法底层自动调用!】 Remove和contains!都是底层调用了equals方法的! */public static void main(String[] args) {ArrayList<Person> al = new ArrayList<Person>();al.add(new Person("张三",20));al.add(new Person("老胡",23));al.add(new Person("张三",20));al.add(new Person("贝贝",20));al.add(new Person("涵妮",44));al = ss(al);Iterator<Person> it = al.iterator();while(it.hasNext()){Person p =it.next();System.out.println(p.getName()+"...."+p.getAge());}}public static ArrayList<Person> ss(ArrayList<Person> al){ArrayList<Person> temp = new ArrayList<Person>();Iterator<Person> itt = al.iterator();while(itt.hasNext()){Person s = itt.next();if(!temp.contains(s))temp.add(s);}return temp;}} class Person{private String name;private int age;Person(String name,int age){this.name = name;this.age = age;}public boolean equals(Object obj){if(!(obj instanceof Person))return false;Person p = (Person)obj;return this.name.equals(p.name) && this.age==p.age;}public String getName(){return name;}public int getAge(){return age;}}
HashSet
Set基本功能和共性在介绍collection的时候已经差不多了!
而hashSet调用的数据结构是哈希表!
*哈希致相同!比较对象
Hashset的比较:
1、先自动调用hashcode()
2、若1相同的情况下用equals()
以上两个条件和方法保证了元素的唯一性
注意一点:覆写equals()的时候注意参数!一定是Object
而对于判断元素!(记住contains和remove)依据是以上两个方法!
- Java学习第14天:集合框架零接触和基本理解(List和Set)
- 黑马程序员java学习—集合框架List和Set
- Java集合框架 List和Set
- 集合框架(List和Set)
- 集合框架List和Set
- 全面接触Java集合框架 set list collection
- java日常学习:集合(二)list和set接口
- java集合框架-List和Set和相关的方法
- Java中的集合(List和Set)
- java集合list和set
- Java集合框架Collection(List、Set和Map)
- Java语言基础——06.集合框架(1)集合框架概述和List、Set集合
- 集合框架--List和Set的特点
- java中API:集合框架1(Collection,List,Set及其子类和迭代器的应用)
- 黑马程序员——java基础拾遗之集合框架(一) List 和 Set
- java集合框架(List、Set、Map)
- java集合框架---List/Set
- Java集合List、Set和Map
- 设计模式之代理模式
- Linux 挂载文件系统
- java反射机制
- ASP.Net网站几个部署问题
- poj1716 Integer Intervals(贪心)
- Java学习第14天:集合框架零接触和基本理解(List和Set)
- 天猫魔盒 + 旧显示器 DIY网络电视
- Java学习第15-16天:集合框架之Map和泛型(半壁江山了)
- CUGB图论专场2:C - Kindergarten 最大完全子图
- RAS理解
- eclipse九个最常用的快捷键
- 面试过程要做的准备
- Ubuntu 下安装Tomcat 6
- “大气”网站欣赏