`

Collection集合根接口、两个子接口list和set

    博客分类:
  • j2se
 
阅读更多

 

 第一:由数组的缺点来引入集合:

   1.数组只能保存相同的数据类型的数据

   2.数组的长度是不可变的

 

第二:集合的引入

  1.长度可变的数组。集合的容量随着元素的个数自适应变化
  2.可以保存任意类型的元素。

 

第三:Collection根接口和List子接口

1.Collection是根接口(是个接口)

2.List是Collection的子接口(有序的集合也称序列):允许重复元素的出现。放入集合的数据和取出集合的数据一致,list集合有索引存在(这点跟数组一样有下标)

3.set是Collection的子接口,不能出现重复元素的集合,最多包含一个null(因为两个null就重复了)。也就是说不能包含obj.equals(obj2)==true

 

第四:List接口中实现类

   (一):Vector实现类:

1.用索引(下标)访问元素,

2.是一个可以自动增长的数组(其实低层就是个数组),

3.数组在定义的时候就要定义好长度,因此长度不可变。而vector如果不定义大小的话就默认开辟一个大小为10的空间(其实就是十个开间的数组,如果不够用的话就每次增长10个),用于保存十个元素。

4,由于底层是个数组,因此对于Vector来说也是用下标获取元素。 在Vector中的get(获取)方法,它调用另一个方法,另一个方法就是数组获取元素的方法。

5.Vector没有重写object的toString方法和equals方法,在 他还是打印和比较的是地址,如果想让他打印和比较的是内容的话,都要重写object的这两个方法 。

6.在多线程情况下是安全的,安全性保证了,就导致速度慢了。
 7.数组的length(长度)方法是返回数组的长度,长度在new的时候已经给定了(也就是开辟的空间,例如开辟10个空间,可我就用了3个,返回的也是10),集合中的size(尺寸)返回的是元素数(例如往里面写三个元素,就返回三个,这也就是长度可变的意思)

8.vector的程序:

public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  //1  创建集合Vector类的对象,该对象封装10个小空间
  Vector vector = new Vector();
  
  boolean flag1 =vector.isEmpty();
  System.out.println("flag1="+flag1);
  //2 容器中保存数据
  vector.add("hello");
  vector.add(100);
  vector.add(123.23);

  int size = vector.size();/**集合的长度是10(默认的),size表示的是元素的个数,因为这里输出的是3

                                      数组中规定length方法返回的数组的长度,而不是数组中元素的个数。**/
  vector.add("hello");vector.add("hello");vector.add("hello");vector.add("hello");

vector.add("hello");vector.add("hello");vector.add("hello");vector.add("hello");
  int size2= vector.size();
  System.out.println("size2="+size2);//这里输出的是12,因为默认长度是10不够用了,又自动增长了10
  
  //3 获取容器中的数据
  for(int x=0;x<vector.size();x++)
  {
   //获取集合中的元素
   Object obj = vector.get(x);
   System.out.println(obj);
  }
  
  //判断集合中有没有指定的元素
  boolean flag = vector.contains("hello wugui");
  System.out.println("flag="+flag);
  //vector.equals(o)  比较集合中对应位置上的元素是否相等
  
  //返回指定元素在集合第一次出现的位置
  int index=vector.indexOf("hello");
  System.out.println("index="+index);
  //删除指定的元素
  vector.remove(3);
  
  for(int x=0;x<vector.size();x++)
  {
   //获取集合中的元素
   Object obj = vector.get(x);
   System.out.println(obj);
  }
  
  //将vector转化为数组
  Object [] arr=vector.toArray();
  
  System.out.println(vector);
 }

 

 

(二):ArrayList实现类

ArrayList:(此类大致上与Vector一样):

1.不一样的地方是此类是线程不同步的,不安全(一个一个来)。

2,ArrayList没有重写object的toString方法和equals方法,在contains和remove方法中(这两个方法都需要比较两个元素内容) 他还是打印和比较的是地址,如果想让他打印和比较的是内容的话,都要重写object的这两个方法。

3.程序:

public class Student
{
 
 private String sno;
 private String name;
 private int age;
 public String getSno() {
  return sno;
 }
 public void setSno(String sno) {
  this.sno = sno;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public Student(String sno, String name, int age) {
  super();
  this.sno = sno;
  this.name = name;
  this.age = age;
 }
 public Student() {
  super();
  // TODO Auto-generated constructor stub
 }
 @Override
 public String toString() {
  return "Student [sno=" + sno + ", name=" + name + ", age=" + age + "]";
 }
 
 public boolean equals(Object obj)
 {
  
  if(this==obj)
   return true;
  if(!(obj instanceof Student))
   return false;
  Student stu = (Student)obj;
  
  if(this.sno.equals(stu.sno)&&
    this.name.equals(stu.name)&&
    this.age==stu.age)
  {
   return true;
  }
  
  return false;
  
 }
}

 

 

public static void main(String[] args) {
  
  Student stu1 = new Student("111","小强",26);
  Student stu2 = new Student("112","旺财",24);
  Student stu3 = new Student("113","小白",20);
  Student stu4 = new Student("114","小习",24);
  
  //1 创建集合对象
  ArrayList stuList = new ArrayList();
  //2 保存
  stuList.add(stu1);
  stuList.add(stu2);
  stuList.add(stu3);
  stuList.add(stu4);
  
  //3 遍历输出
  for(int x=0;x<stuList.size();x++)
  {
   
   Object obj = stuList.get(x);
   System.out.println(obj);
  }
  Student stu5 = new Student("114","小习",24);
  boolean flag = stuList.contains(stu5);//注意重写equals方法
  System.out.println("flag="+flag);
  
  Student stu6 = new Student("113","小白",20);
  stuList.remove(stu6);
  
  //3 遍历输出
  for(int x=0;x<stuList.size();x++)
  {
   
   Object obj = stuList.get(x);
   System.out.println(obj);
  }
  
  System.out.println(stuList.toString());
 }
}

 

(三)LinkedList实现类:(他的底层不是数组了,而是链表(单项链表))

1.链表里面的每个小内存空间不一定是连续的(上面两个实现类的每个空间都是连续的)。链表中每个元素都包含两个内容(一个是该空间的内容, 另一个是下一个空间的地址,这就保证了空间不用连续)。2.LinkedList的方法比较多,也就是说他继承了List以外,自己特有的方法比较多。也就是针对开头(first)和结尾(last)的。
3.栈结构:先进后出,体现的就是LinkerList的开头和结尾的应用(这里也体现出他特有的方法)。多出来的方法是addFirst,addLast,getFirst,getLast,removfFirst,removeLast这六个

 

第五:总结:

1.vector:这个内部类里面有一个属性是“obejct类型的数组”,有一个属性是“元素的个数",还有一个是“增长量”。这跟StringBuffer很相似
2.vector是当容量不够用的时候就增加10,每次不够用都增加10个空间,vector可以保存任意类型的元素,因为返回值是object类型的数据
3.集合的放进去拿出来是最常用的操作,放进去就是add方法,拿出来就是对集合的遍历,用到size方法和get方法
4.vector类的contains(包含)这个方法首先调用了vector类的indexof方法(在集合中找指定元素对应的索引),而vector中的indexof方法又调用了vector的equals方法,而vector的equals没有重写object的equals,因此比较的是地址,为了让他比较内容,集合对象重写object类的equals方法
5.remove删除的方法,在删除的时候要先找到才能删除,因此也用到了equals方法

6.set也是Collection的子接口:不能出现重复元素的集合,最多包含一个null(因为两个null就重复了)。也就是说不能包含obj.equals(obj2)==true

 

 

分享到:
评论

相关推荐

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

    ### Java集合Collection、List、Set、Map使用详解 #### 1. 集合框架概述 集合框架是Java编程语言中最基本且最重要的组成部分之一。它提供了处理数据集合的强大工具,这些工具不仅支持基本操作(如添加、删除和查找...

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

    Collection接口有两个主要实现:List和Set。 List接口 List接口继承自Collection接口,提供了有序的集合操作。List接口的实现类包括ArrayList、LinkedList、Vector等。List接口提供了以下方法: * 添加元素:add...

    Collection,List,Set和_Map用法和区别

    Collection 是一个接口,下面有两个子接口:List 和 Set。 List 是一种有序的集合,元素可以重复,通过索引来访问元素。List 的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 是线程不安全的,Vector 是...

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

    Collection接口有两个主要实现类:List和Set。 List接口继承自Collection接口,它定义了一个有序的集合,元素可以重复。List接口有两个主要实现类:ArrayList和LinkedList。ArrayList是一个大小固定的数组,...

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

    本文将深入探讨Java集合框架中的四个主要接口:Collection、List、Set和Map,以及它们的实现原理。 ### 集合框架概述 集合框架是Java API中用于存储和管理对象的统一框架。它为数据结构提供了抽象接口,使得程序员...

    java集合类详解(set list ArrayList等java集合类详述)

    集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、remove、contains 等。Collection 接口没有实现类,因此需要通过其子接口来实现。 Set 是一个...

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

    Java 集合框架的主要组件包括 Collection、List、Set、Map 等。 1.1 容器简介 容器是指可以存储对象的对象。 Java 集合框架中有多种类型的容器,每种容器都有其特点和用途。常见的容器有 Collection、List、Set、...

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

    本文将深入探讨集合框架的各个组成部分,包括Collection、List、Set和Map,以及它们的特点、常用方法和实现原理。 1. 集合框架概述 集合框架是一组接口和类,它们为数据存储提供了统一的接口和实现。这些接口和类...

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

    Java集合排序及java集合类详解(Collection、List、Map、Set) Java 中的集合框架是 Java 语言中最重要和最常用的部分之一。它能够帮助开发者更方便地处理和存储数据,从而提高编程效率和程序的可读性。本文将详细...

    Java(Collection_List_Map_Set).rar_java集合类详解

    本篇文章将深入探讨Java集合类,包括Collection、List、Map和Set,以及它们之间的关联和排序机制。 首先,让我们从Collection接口开始。Collection是最基本的集合接口,它是所有集合类的父接口。Collection接口定义...

    List和Set使用retainAll方法的比较

    本文将深入探讨List和Set在使用`retainAll`方法时的效率差异,并通过`ListAndRetainAll.java`和`SetAndRetainAll.java`两个示例代码来具体分析。 首先,让我们了解`retainAll`方法的基本概念。`retainAll`是Java...

    Java集合Collection、List、Set、Map使用详细讲解.doc

    集合框架包括了多种接口和类,如Collection、List、Set、Map等,它们各自有特定的功能和用途。 1. **集合框架概述** - **容器简介**:集合框架就是一组接口和类,它们定义了存储、检索和操作对象的标准方式。这些...

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

    `Collection`是所有集合的根接口,它是`List`、`Set`和`Queue`接口的父接口。 `List`接口代表一个有序的集合,元素可以重复,且支持索引访问。`ArrayList`和`LinkedList`是`List`接口的主要实现类。`ArrayList`提供...

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

    本文将深入探讨Java集合框架的四大核心组件:`Collection`、`List`、`Map`和`Set`,以及它们的排序方法。 ### 1. 集合框架概述 #### 1.1.1 容器简介 在Java中,容器(Containers)是用来存储和管理对象的结构。...

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

    本文将深入探讨Java集合框架,包括Collection、List、Set和Map四大接口,以及它们的实现原理和排序方法。 **1. 集合框架概述** 集合框架是一组接口和类,用于存储、管理和操作对象的容器。这些接口和类为开发者...

    集合概述Collection , List ,Set , Map

    根据不同的存储需求,Java中的容器可以分为两大类:集合(Collection)和映射(Map)。 ##### 1.1.1 容器简介 容器在Java编程中扮演着非常重要的角色。在实际应用中,经常需要处理多个对象的集合,并且对这些对象...

Global site tag (gtag.js) - Google Analytics