Java学习第14天:集合框架零接触和基本理解(List和Set)

来源:互联网 发布:excel筛选重复数据个数 编辑:程序博客网 时间:2024/06/05 20:39
 ------- android培训、java培训、期待与您交流! ----------

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

而对于判断元素!(记住containsremove)依据是以上两个方法!


 ------- android培训、java培训、期待与您交流! ----------
0 0