`
l4432848
  • 浏览: 253510 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java集合之Collection接口

    博客分类:
  • java
阅读更多

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使用示例:

  Java代码

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基本差不多,示例代码

  Java代码

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差不多,如:

  Java代码

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类:

  Java代码

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元素

  Java代码

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类加上方法:

  Java代码

@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类

  Java代码

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使用:

  Java代码

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());

}

}

  运行结果:

  

技术分享:www.kaige123.com

0
1
分享到:
评论

相关推荐

    Java集合框架Collection接口.pdf

    `Collection`接口是Java集合框架中的核心接口之一,它是所有集合类的根接口,提供了一系列用于操作集合的基本方法。通过这个接口,我们可以执行添加、删除、遍历集合元素等基本操作。 #### 三、Collection接口的...

    java泛型集合 java集合 集合 java Collection

    Java集合框架是一个包含多种数据结构(如列表、集、队列等)的API,这些数据结构由接口(如`Collection`、`List`、`Set`和`Queue`)和实现这些接口的类(如`ArrayList`、`HashSet`和`LinkedList`)组成。`Collection...

    java集合框架之Collection实例解析

    Java集合框架是Java编程语言中一个非常重要的组成部分,它为数据存储和操作提供了丰富的接口和类。本篇文章将深入解析`Collection`接口及其主要实现类`List`和`Set`,帮助你理解并熟练运用这些核心概念。 首先,`...

    java集合Collection总结

    Collection接口是Java集合框架的顶级接口,它是所有单列集合(比如List、Set)的父接口。在本总结中,我们将深入探讨Collection接口以及其主要子接口和实现类,通过实例来帮助理解它们的特性和使用场景。 1. **...

    Java 泛型、collection接口.pdf

    Collection 接口是 Java 中的一个重要接口,它提供了一些常用的集合操作,如添加、删除、遍历等。Collection 接口的主要实现类有 ArrayList、LinkedList、HashSet 等。 在 Java 中,Date 类是一个特殊的类,它可以...

    Java集合Collection、List、Set、Map使用详解.pdf

    "Java集合Collection、List、Set、Map使用详解" Java集合是Java编程语言中最基本也是最重要的一部分。能够正确地使用集合类和理解集合的实现原理对于Java程序的开发具有无比的好处。本文将详细解释Java集合的实现...

    java集合思维导图

    在`java集合.png`和`java集合.xmind`文件中,你可以找到更为直观的思维导图,它将帮助你清晰地理解各个接口之间的关系以及它们的主要特性。通过这样的学习方式,不仅可以加深对Java集合的理解,还能提高问题解决的...

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    Java集合排序及java集合类详解(Collection、List、Map、Set).pdf

    Collection接口是Java集合框架的顶层接口,它定义了基本的集合操作,如add、remove、contains等。Collection接口有两个主要实现类:List和Set。 List接口继承自Collection接口,它定义了一个有序的集合,元素可以...

    Java集合Collection、List、Set、Map使用详解

    Java集合框架是Java编程语言中不可或缺的部分,它提供了一种高效管理对象的方式,尤其是在处理大量数据时。本文将深入解析Java集合中的Collection、List、Set和Map,包括它们的使用方法、实现原理以及如何进行排序。...

    Java基础篇:Java集合.pdf

    该文档主要详细总结了Java集合的相关知识,包括Collection和Map接口、Collection接口的子接口List和Set接口以及具体的实现类、存储原理等;Map接口的子接口HashMap、LinkedHashMap、TreeMap、Properties等

    Java集合:Collection、List、Set、Map使用详解

    Java集合框架是Java编程语言的核心组成部分,它提供了一种存储和操作对象的高效方式。本文将深入探讨Java集合框架中的四个主要接口:Collection、List、Set和Map,以及它们的实现原理。 ### 集合框架概述 集合框架...

    java 集合

    在Java集合框架中,`Collection`是所有单值集合的父接口,它包含了`List`、`Set`等子接口。而`Iterable`接口是集合可迭代的标志,通过`iterator()`方法获取迭代器,遍历集合中的元素。`Map`接口则是用于存储键值对的...

    java 集合部分笔记

    【Java集合】 Java集合框架是Java编程语言中用于存储和操作对象的工具,它提供了多种数据结构,如列表、集、映射等,以适应不同的数据处理需求。集合类通常位于`java.util`包下,是Java程序员必备的知识点。 1. **...

    java集合详解.pdf

    集合框架包括 Collection、List、Set、Map 等接口,每个接口都有其特点和用途。 1.1.1 容器简介 容器是指存储数据的对象,Java 中的容器可以分为两类:Collection 和 Map。Collection 是一种用于存储对象的容器,...

    Java集合详解,详细讲解java的集合类

    本文将深入讲解Java集合类,特别是Collection接口和其下的List、Set,以及Map接口中的几个重要实现类。 首先,我们来看Collection接口。Collection是最基本的集合接口,它代表一组Object,即它的元素。Collection...

    Tedu一段Java集合Collection

    根据给定的信息,本文将详细解析“Tedu一段Java集合Collection”的知识点,涵盖集合的基本概念、集合框架中的关键接口、`Collection`接口的核心方法、集合的遍历方式、泛型的应用以及集合与数组之间的相互转换。...

    Java集合框架之Collection接口详解

    在Java集合框架中,`Collection`接口是所有单值容器的基础接口,而`Map`接口则是用于存储键值对的接口。这两个接口构成了Java集合框架的基础。 `Collection`接口定义了基本的集合操作,如添加、删除、检查和遍历...

Global site tag (gtag.js) - Google Analytics