`
hm4123660
  • 浏览: 278565 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
Dea4ce76-f328-3ab2-b24a-fb268e1eeb75
数据结构
浏览量:69114
社区版块
存档分类
最新评论

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

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

 

运行结果:



 

  • 大小: 13.8 KB
  • 大小: 11.9 KB
  • 大小: 9.1 KB
  • 大小: 11.5 KB
  • 大小: 8.7 KB
3
0
分享到:
评论

相关推荐

    Java集合框架Collection接口.pdf

    其中Collection接口是Java集合框架的基础接口之一,定义了一些基本的集合操作,包括添加元素、删除元素、遍历集合等。在这里,我将为您详细介绍Java集合框架中的Collection接口。 Collection接口是Java集合框架中的...

    计算机后端-Java-Java核心基础-第24章 集合01 05. Collection接口的常用方法2.avi

    计算机后端-Java-Java核心基础-第24章 集合01 05. Collection接口的常用方法2.avi

    计算机后端-Java-Java核心基础-第24章 集合01 07. Collection接口的常用方法4.avi

    计算机后端-Java-Java核心基础-第24章 集合01 07. Collection接口的常用方法4.avi

    计算机后端-Java-Java核心基础-第24章 集合01 06. Collection接口的常用方法3.avi

    计算机后端-Java-Java核心基础-第24章 集合01 06. Collection接口的常用方法3.avi

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

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

    Java基础篇:Java集合.pdf

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

    超全Java集合框架讲解.md

    超全Java集合框架讲解 - 超全Java集合框架讲解 - 集合框架总览 - Iterator Iterable ListIterator - Map 和 Collection 接口 - Map 集合体系详解 - HashMap - LinkedHashMap - TreeMap - WeakHashMap - ...

    精通java集合框架--List,Set..

    但是,在“集合框架”中,接口 Map 和 Collection 在层次结构没有任何亲缘关系,它们是截然不同的。这种差别的原因与 Set 和 Map 在 Java 库中使用的方法有关。Map 的典型应用是访问按关键字存储的值。它支持一系列...

    java集合源码-jdk-collection:java集合类源码阅读

    java 集合源码 JDK-Collection集合入门 总的list和set类结构大致如下所示 Map不继承Collection,其结构如下 首先介绍下迭代器的概念 迭代器无非是一个接口,假设我们有一个数组,如果我们要实现迭代器,只需要根据该接口...

    java集合知识-map、set等

    Set接口中的方法和Collection一致。 |--HashSet: 内部数据结构是哈希表 ,是不同步的。 如何保证该集合的元素唯一性呢? 是通过对象的hashCode和equals方法来完成对象唯一性的。 如果对象的hashCode值不同,...

    java 集合部分笔记

    java 集合部分笔记 1 集合的概述 2 Collection接口和Iterator接口(迭代器) 3 List接口 4 Set接口 5 Map接口

    Java集合框架.pdf

    Java集合框架概述 Java集合框架是一个抽象数据类型的框架,它提供了一组接口和类,可用于处理各种类型的数据结构,如列表、队列、集、映射等。 Java集合框架的主要特点是: 1、可扩展性:Java集合框架提供了一组可...

    collectionJava源码-java-code-gen:基于Java注释处理器的Java源代码生成器集合

    集合Java源码#java-code-gen基于的Java源代码生成器集合 #子项目 :用于编写注释处理器的实用程序。 仅用于getter或getter / setter接口的实现,生成器和属性名称提取器类生成器 Bson Java Bean编解码器生成器。 ...

    java集合类演示源码

    Java平台提供了一个全新的集合框架,框架的核心为Collection、List(列表)、Set(集合)和Map(映射)。集合类的框架为集合的实现者提供了大量的接口和抽象类,并对其中的某些机制给予了描述,例如,Iterator(迭代...

    Java集合总结.txt

    Collection -- 集合接口 List -- List接口(添加了许多针对下标操作的方法) 特点:有序的,且可重复 ArrayList: 数据结构:一维数组 LinkedList: 数据结构:双向链表 Vector: 数据结构:一...

    Java集合框架常见面试题

    Java集合框架常见面试题 剖析⾯试最常⻅问题之 Java 集合框架 包含以下几个模块: 1、集合概述 2、Collection子接口之List 3、Collection子接口之Set 4、Map接口 5、Collection工具类 6、其他重要问题

    Java集合框架使用总结

    所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection Framework)。 Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了。这样...

    Java集合框架Set接口.pdf

    Set接口继承自Collection接口,因此它具有Collection接口定义的所有方法。同时,Set接口还具有自己的特殊方法,例如:添加元素、删除元素、判断元素是否存在等。 Set接口的实现类包括HashSet、LinkedHashSet和...

    40道java集合面试题含答案(很全很详细)

    Java集合类是Java.util包中的重要内容,它提供了一套性能优良、使用方便的接口和类,用于处理对象的集合。这些类主要用于存储、检索、操作一组对象数据。 Java集合类主要包括两种类型的容器:Collection和Map。...

    java集合课件

    本节内容包括 集合的概念 集合API Collection 接口 Iterator 接口 Set 接口 List 接口 和 Comparable 接口 Map 接口

Global site tag (gtag.js) - Google Analytics