java的集合分为三大接口,分别是Collection,Map,Iterator,集合接口和类在java.util包中,此次主要介绍三大接口之一的Collection接口。
一些Collection允许有重复元素,而另一些则不允许,一些Collection是有序的,另一些则是无序的。Collection不提供接口的任何直接实现,它提供更加具体的子接口List和Set。
1.List接口
List是有序的集合,此接口的用户队列表的每一个元素的插入位置进行精确的控制,可以根据元素的整数索引访问元素,并搜索列表中的元素。
List接口实现类主要有:ArrayList,Vector,LinkedList
1)ArrayList
1.默认的ArrayList的大小为10
2.ArrayList内部实现是使用动态数组
3.ArrayList是线程不安全的
4.如果数组满了,需要动态扩充,扩充长度为原来数组长度的一半左右,扩充时需要新建一个数组,再把原先数据复制过来。
ArrayList使用示例:
public static void main(String[] args){ String okString=null; List<String>lists=new ArrayList<String>(); lists.add("aa"); lists.add("aa"); lists.add(1,"bb");//指定位置插入 lists.add("cc"); lists.add(okString); //检查ArrayList是否为空 System.out.println(lists.isEmpty()); //查找指定元素的首次出现位置 System.out.println(lists.indexOf("aa")); //查看是否含有该元素 System.out.println(lists.contains("cc")); //输出list的长度 System.out.println(lists.size()); //输出 for(int i=0;i<lists.size();i++) System.out.println(lists.get(i)); //清除list lists.clear(); }
总结:Arra能直接通过下标获取数据,数据读取非常方便;然而ArrayList的插入和删除,会导致内部数据大量移位,会影响性能。如果我们已经知道需要的元素个数,我们可以初始化时指定ArrayList的容量,这样可以有效的避免数组多次扩充,从而提高效率;但也不能初始化太大,浪费内存。
2)Vector
Vector类可以实现增长的对象数组,与数组一样,可以使用下标直接进行数据访问。Vector的大小可以根据需要扩充或缩小。
1.Vector内部使用动态数组实现
2.默认构造大小为10,增量为0.可在构造方法指定大小和增量Vector(int size,int Increment)
3.扩充方式:如果有指定增量,则是当前容量+增量;如果增量等于0,则是当前容量*2;
4.Vector是线程安全的
Vector用法和ArrayList基本差不多,示例代码
public static void main(String[] args){ String okString=null; List<String>vectors=new Vector<String>(); vectors.add("aa"); vectors.add("aa"); vectors.add(1,"bb");//指定位置插入 vectors.add("cc"); vectors.add(okString); //检查ArrayList是否为空 System.out.println(vectors.isEmpty()); //查找指定元素的首次出现位置 System.out.println(vectors.indexOf("aa")); //查看是否含有该元素 System.out.println(vectors.contains("cc")); //输出list的长度 System.out.println(vectors.size()); //删除元素; vectors.remove(0); //输出 for(int i=0;i<vectors.size();i++) System.out.println(vectors.get(i)); //清除list vectors.clear(); }
3)LinkedList
LInkedList是List接口的链表实现。实现所有可选的列表操作,并允许所有元素包括null。其基本用法与ArrayList差不多,如:
public static void main(String[] args){ String okString=null; List<String>link=new LinkedList<String>(); link.add("aa"); link.add("aa"); link.add(1,"bb");//指定位置插入 link.add("cc"); link.add(okString); //检查ArrayList是否为空 System.out.println(link.isEmpty()); //查找指定元素的首次出现位置 System.out.println(link.indexOf("aa")); //查看是否含有该元素 System.out.println(link.contains("cc")); //输出list的长度 System.out.println(link.size()); //删除元素; link.remove(0); //输出 for(int i=0;i<link.size();i++) System.out.println(link.get(i)); //清除list link.clear(); }
ArrayList和Vector是使用动态数组实现的,Vector相比ArrayList可以指定增量,而LinkedList是用链表实现的。他们的区别主要体现在数组和链表的区别
2.Set接口
一个不包含重复元素的colletion。即Set不包含满足e1.equals(e2)的元素,Set最多包含一个null元素
Set的实现类主要有:HashSet,TreeSet,LinkedHashSet
1)HashSet
实现了Set接口,它不保证set的迭代顺序,特别是它不保证该顺序永恒不变,此类允许使用null元素。底层是使用HashMap实现的。
下面我们主要讲解不能包含重复元素。
如:
定义Person类:
public class Person { public String name; public int age; public Person(String name,int age){ this.name=name; this.age=age; } @Override public String toString() { return "person [name=" + name + ", age=" + age + "]"; } }
set添加Person元素
public static void main(String[] args){ Set<Person>sets=new HashSet<Person>(); Person ok=new Person("小明", 18); Person ok1=new Person("小红", 16); Person ok2=new Person("小白", 15); sets.add(ok); sets.add(ok1); sets.add(ok2); //添加不进去 sets.add(ok1); //能添加进去 sets.add(new Person("小明", 18));//与ok数据一样 System.out.println("size: "+sets.size()); }
发现同一个对象的ok1只能添加一次,然而与ok相同数据的被多次添加。Set使用e1.equals(e2)来判断的。
在java集合中,判断两个对象是否是同一个对象是:
1.先判断两个对象的hashCode值是否相等,如果不相等,就认为两个对象不相等;若相等;判断条件2
2.判断两个对象的equals运算是否相等,相等则认为两个对象相等。
所以我们需要重写Person的hashCode和equals方法
把Person类加上方法:
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }
此时后面与ok数据相同的对象也不能添加进集合里了。
2)TreeSet
TreeSet元素自然排序,底层是使用TreeMap实现的,自定义要显示Comparable接口
定义Person类
public class Person implements Comparable<Person>{ public String name; public int age; public Person(String name,int age) { this.name=name; this.age=age; } public int compareTo(Person o) { if(o==null) throw new NullPointerException(); if(this.age>o.age) return 1; if(this.age<o.age) return -1; return 0; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
TreeSet使用:
public static void main(String[] args){ Set<Person>sets=new TreeSet<Person>(); Person ok=new Person("小明", 18); Person ok1=new Person("小红", 16); Person ok2=new Person("小白", 15); sets.add(ok); sets.add(ok1); sets.add(ok2); //添加不进去 sets.add(ok1); //输出 Iterator<Person> iterator=sets.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } }
运行结果:
相关推荐
在"Java--collection.rar"这个压缩包中,我们可以找到名为"Java collection.pdf"的文件,它很可能是对Java集合框架的详细讲解。 首先,集合框架的基础是`Collection`接口,它是所有单值容器的父接口,包括`List`, `...
Java集合框架是Java编程语言中一个至关重要的组成部分,它为数据存储、管理和操作提供了丰富的类库。这个框架包括了各种接口、类以及实现,使得开发者能够高效地处理对象的集合,无论是小型还是大型数据集。在Java...
本篇资源摘要信息主要讲解 Java 集合框架的相关知识点,包括 Collection 接口、List 接口、Set 接口、Map 接口的特点和区别,以及 ArrayList、LinkedList、Vector 等实现类的使用和区别。 一、Collection 接口的...
Java集合框架是一个包含多种数据结构(如列表、集、队列等)的API,这些数据结构由接口(如`Collection`、`List`、`Set`和`Queue`)和实现这些接口的类(如`ArrayList`、`HashSet`和`LinkedList`)组成。`Collection...
在“1-集合框架001-Collection接口-1080P 高清-AVC.mp4”视频中,可能会讲解以下内容: 1. Collection接口的基本方法:add()、remove()、contains()、isEmpty()、size()等,以及如何使用它们来管理集合中的元素。 2...
Collection 接口是 Java 集合框架的核心接口,定义了基本的集合操作方法,如 add()、remove()、contains() 等。Collection 接口有多个子接口,分别是 List、Set 和 Queue 接口,每个子接口都定义了特定的集合操作...
Java集合框架是Java编程语言中处理数据结构的核心组件,它广泛应用于存储、操作和检索数据。在java.util包和java.util.concurrent包中,Java集合框架被细分为两大类:基础集合类和并发集合类。基础集合类主要用于单...
集合框架001-Collection接口13-16",通过四个视频文件来深入学习这个关键接口及其相关概念。 首先,我们来看标题中提到的"Collection接口"。它是Java集合框架的顶级接口,位于`java.util`包下。所有的集合类,无论...
### Java集合框架Collection接口详解 #### 一、Java集合框架简介 Java集合框架(Java Collection Framework)是Java标准库中的一个重要组成部分,它提供了一系列用于存储和操作数据集合的接口和实现类。这些接口和...
集合框架001-Collection接口6-9"中涉及的关键知识点,包括`Collection`接口、`ArrayList`源码分析、`Comparator`接口以及`Comparable`接口,以及`Arrays`类中的算法。 首先,`Collection`接口是Java集合框架的根...
#### Collection接口详解 `Collection`接口是Java集合框架的基础,它定义了一系列基本的操作,如添加、删除和查询等。以下是该接口中的一些关键方法: - `boolean add(Object element)`:向集合中添加一个元素。 -...
1. **Collection接口**:它是Java集合框架的基础,提供了多种方法来管理集合中的元素。例如,`add(E element)`用于向集合中添加元素,`remove(Object obj)`用于移除指定元素,`contains(Object o)`用来检查集合是否...
Java集合框架是编程中不可或缺的一部分,它提供了多种数据结构,如列表(List)、集(Set)以及映射(Map),便于我们高效地存储、管理和操作数据。本文将深入探讨Map和Collection接口,以及它们的实现类,特别是HashSet和...
本课程主要聚焦在集合框架中的`Collection`接口,这是所有单值集合的顶级接口,是Java集合框架的基石之一。下面将详细解析`Collection`接口以及与其相关的知识点。 首先,我们来谈谈`Collection`接口。它是`java....
计算机后端-Java-Java核心基础-第24章 集合01 05. Collection接口的常用方法2.avi
计算机后端-Java-Java核心基础-第24章 集合01 06. Collection接口的常用方法3.avi
计算机后端-Java-Java核心基础-第24章 集合01 07. Collection接口的常用方法4.avi