第一:由数组的缺点来引入集合:
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使用详解 #### 1. 集合框架概述 集合框架是Java编程语言中最基本且最重要的组成部分之一。它提供了处理数据集合的强大工具,这些工具不仅支持基本操作(如添加、删除和查找...
Collection接口有两个主要实现:List和Set。 List接口 List接口继承自Collection接口,提供了有序的集合操作。List接口的实现类包括ArrayList、LinkedList、Vector等。List接口提供了以下方法: * 添加元素:add...
Collection 是一个接口,下面有两个子接口:List 和 Set。 List 是一种有序的集合,元素可以重复,通过索引来访问元素。List 的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 是线程不安全的,Vector 是...
Collection接口有两个主要实现类:List和Set。 List接口继承自Collection接口,它定义了一个有序的集合,元素可以重复。List接口有两个主要实现类:ArrayList和LinkedList。ArrayList是一个大小固定的数组,...
本文将深入探讨Java集合框架中的四个主要接口:Collection、List、Set和Map,以及它们的实现原理。 ### 集合框架概述 集合框架是Java API中用于存储和管理对象的统一框架。它为数据结构提供了抽象接口,使得程序员...
集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、remove、contains 等。Collection 接口没有实现类,因此需要通过其子接口来实现。 Set 是一个...
Java 集合框架的主要组件包括 Collection、List、Set、Map 等。 1.1 容器简介 容器是指可以存储对象的对象。 Java 集合框架中有多种类型的容器,每种容器都有其特点和用途。常见的容器有 Collection、List、Set、...
本文将深入探讨集合框架的各个组成部分,包括Collection、List、Set和Map,以及它们的特点、常用方法和实现原理。 1. 集合框架概述 集合框架是一组接口和类,它们为数据存储提供了统一的接口和实现。这些接口和类...
Java集合排序及java集合类详解(Collection、List、Map、Set) Java 中的集合框架是 Java 语言中最重要和最常用的部分之一。它能够帮助开发者更方便地处理和存储数据,从而提高编程效率和程序的可读性。本文将详细...
本篇文章将深入探讨Java集合类,包括Collection、List、Map和Set,以及它们之间的关联和排序机制。 首先,让我们从Collection接口开始。Collection是最基本的集合接口,它是所有集合类的父接口。Collection接口定义...
本文将深入探讨List和Set在使用`retainAll`方法时的效率差异,并通过`ListAndRetainAll.java`和`SetAndRetainAll.java`两个示例代码来具体分析。 首先,让我们了解`retainAll`方法的基本概念。`retainAll`是Java...
集合框架包括了多种接口和类,如Collection、List、Set、Map等,它们各自有特定的功能和用途。 1. **集合框架概述** - **容器简介**:集合框架就是一组接口和类,它们定义了存储、检索和操作对象的标准方式。这些...
`Collection`是所有集合的根接口,它是`List`、`Set`和`Queue`接口的父接口。 `List`接口代表一个有序的集合,元素可以重复,且支持索引访问。`ArrayList`和`LinkedList`是`List`接口的主要实现类。`ArrayList`提供...
本文将深入探讨Java集合框架的四大核心组件:`Collection`、`List`、`Map`和`Set`,以及它们的排序方法。 ### 1. 集合框架概述 #### 1.1.1 容器简介 在Java中,容器(Containers)是用来存储和管理对象的结构。...
本文将深入探讨Java集合框架,包括Collection、List、Set和Map四大接口,以及它们的实现原理和排序方法。 **1. 集合框架概述** 集合框架是一组接口和类,用于存储、管理和操作对象的容器。这些接口和类为开发者...
根据不同的存储需求,Java中的容器可以分为两大类:集合(Collection)和映射(Map)。 ##### 1.1.1 容器简介 容器在Java编程中扮演着非常重要的角色。在实际应用中,经常需要处理多个对象的集合,并且对这些对象...