【详细+超基础】Java-学习笔记 15

简介: 【详细+超基础】Java-学习笔记 15

7fae36d1e520c133b402b12f7f2ff1e.png

集合类


数组可以储存统一数据类型的数据,但长度固定,不适合在数组元素数量未知的情况下使用。集合弥补了数组的这一缺陷。集合API中的接口和类主要位于java.util包中。


1) 集合只能存放对象。比如咱们将一个int类型数据 2020放入集合中,其实该数据是自动转换成Integer对象后存入集合中。


2) 集合存放的是对象的引用,对象本身还是放在堆内存中。


3) 集合元素数量可改变


集合简介


Collection 接口是集合层次框架的根接口,是储存单一对象的集合(即每个位置保存的是单一的对象)。


1、Collection接口有两个直接扩展的子接口:List 与 Set 。

1)List 接口里存在的集合元素顺序,可以重复。接口常用的实现类主要有ArrayList、Vector 和 LinkedList。


ArrayList 和 Vector相似,都是顺序储存,支持对元素的快速访问,但是插入与修改速度慢。


LinkedList是链式储存,元素插入与删除性能好。


2)Set 接口不按顺序存放集合元素,不允许重复元素存在,只是简单地把对象加入到集合中。Set中的实现类有HashSet、LinkedHashSet、TreeSet。


2、Iterator 是用于遍历集合元素的接口,相当于指向集合元素的指针。大部分集合类都实现Iterator接口。

public boolean hasNext(); // 是否还会有下一个元素
public Object next(); // 指针移动到下一个元素,并返回下一个元素对象
public void remove(); // 删除当前指针指向的元素

3、Map是java.util包中的另一个集合接口,它和Collection接口没有关系,但都属于集合类的一部分。Map集合中存储的是键值对,而不是单个的对象,键不能重复,值可以重复。

Collection接口

Collection接口中定义了很多集合共有的成员方法。

public boolean add (Object obj); // 将对象obj 加入到当前集合中。
public boolean addAll (Collection c); // 将集合c 添加到当前集合中。
public void clear(); // 清理当前集合中的所有元素。
public boolean contains(Object obj); // 判断当前集合中是否含有obj 对象。
public Iterator iterator(); // 得到当前集合的迭代器(指针)。
public boolean remove(Object obj); //删除当前集合中的obj 对象。
public boolean isEmpty(); // 判断当前集合是否为空。
public int size(); // 得到当前集合中元素的总数。
public Object[] toArray(); // 将当前集合对象转换为对象数组。

Set接口

Set 接口是Collection 接口的子接口。Set 中的元素没有顺序,不允许有重复的元素,不重复是指集合中任意的2个对象x与y,x.equals(y)始终为 false。


Set常见的实现类主要有AbstractSet、HashSet、LinkedHashSet、TreeSet 等。


AbstractSet: 所有的Set的实现类直接或者间接继承AbstractSet父类。


HashSet: 使用哈希表实现的Set集合,允许存放null元素,不保证元素排列顺序,在编程中常使用该类。


LinkedHashSet: 使用链表实现Set 集合,既有HashSet 的查询速度,又能保存元素的插入顺序。


TreeSet: 使用二叉树实现Set集合,用来对元素进行排序,保证元素的唯一。


// Set与HashSet的用法
public class SetDemo{
    public static void main(String []args){
        Set set=new HashSet();
        set.add("a3");
        set.add("a2");
        set.add(new Double(7.0));
        set.add(new Integer(1));
      set.add("a3");
        System.out.println("set = "+set);
        for(Object o:set){
            System.out.print( ""+o);
        }
    }
}
// 输出结果如下
  set = [a2, 1, a3, 7.0]
  a2 1 a3 7.0 
// 注意:
   1) 输出结果中集合里的元素没有顺序(即没有按照输入顺序,也没有按照自然顺序)。
   2) 输出结果中没有重复元素。如重复的字符a3 就没有重复的。

List接口


List 接口是Collection接口的子接口,定义一个允许重复元素存在的有序对象集合。List 中存放元素的数量(List的容量)可以随着插入操作自动进行调整。


除了从Collection接口中继承的方法外,List接口新增如下的成员方法。

1) public void add(int index,Object obj); // 当前集合index 位置插入对象obj
2) public boolean addAll(int index,Collection c); // 当前集合index 位置插入集合c
3) public Object set(int index,Object obj); // 将集合index 位置的元素用对象obj替换
4) public Object get(int index); // 返回index 位置的元素
5) public Object remove(int index); // 删除index 位置的元素
6) public int indexOf (Object obj); // 返回对象o在集合中第一次出现的位置,如果不存在则返回-1
7) public int lastIndex (Object o); // 返回对象o在集合中最后一次出现的位置,如果不存在则返回-1
8) public List subList (int fromIndex,int toIndex); // 得到一个从fromIndex 开始到toIndex处的当前集合的一个子集合。
9) public ListIterator listIterator(); // 返回当前集合中元素的列表迭代器对象。
10) public ListIterator listIterator(int index); // 从当前集合的指定位置index开始,返回当前集合中元素的列表迭代器。

List 接口常用实现类 ArrayList、Vector、LinkedList、Stack。


1.ArrayList

ArrayList使用顺序存储结构储存对象元素,随机访问速度快。但从ArrayList 集合的中间位置插入或者删除元素时,需要对元素进行复制、移动,代价比较高。因此ArrayList适合进行随机查找和遍历,插入和删除速度慢。


构造方法如下


public ArrayList(); //构造一个空List集合对象。
public ArrayList(Collection c) //构造一个包含指定集合c 的List集合对象。
public ArrayList(int iny); // 构造一个指定大小为iny但内容为空的List集合对象。
//  List和ArrayList的用法
import java.util.ArrayList;
import java.util.List;
public class ListDemo {
  public static void main(String []args) {
    List list =new ArrayList();
    list.add("1");
    list.add(new Double(3.0));
    list.add("1");
    System.out.println("List= "+list);
  }
}
// 运行结果
List= [1, 3.0, 1]

2.Vector


Vector 跟ArrayList 类似,也是采用顺序储存结构储存元素对象。不同点是Vector 是线程安全的,同时可按指定个数扩大容量或翻倍扩大容量。而ArrayList 不是线程安全的,按照50%的比例扩大空间。


3.LinkedList


LinkedList用链表结构储存数据,适合数据的动态插入和删除,随机访问和遍历速度慢。


构造方法如下


public LinkedList(); // 构造一个空的LinkedList集合对象

常用的成员方法


4.Stack


Stack(栈)是一种”先进后出“的数据结构,输入或输出数据的一端叫做“栈顶”,另一端叫“栈底”。Stack是专门用来实现栈的工具类,继承自Vecter类。


构造方法如下

public Stack();


常用的成员方法

public


Iterator接口


所有实现Collection接口的类都有一个iterator()方法,用来返回一个实现Iterator接口的对象,其作用是对Collection的元素进行遍历等操作,只能单向移动。它有以下3个成员方法。


public boolean hasNext(); //判断集合中是否还有元素。
public Object next(); // 得到下一个元素。
public void remove(); // 从集合中删除当前元素。
// 利用Iterator 接口遍历Set中的元素
Set set = new HashSet();
set.add("123");
set.add("abc");
Itera

ListIterator 接口


List集合类现了ListIterator接口,在List接口中有listIterator()方法用于返回ListIterator接口。


istIterator的功能更加强大,定义的方法有:
  1).hasNext() 向前遍历时,如果有下一个元素返回真;
  2).next() 返回下一个元素的值,并将指针加1;
  3).hasPrevious() 向相反方向遍历时,如果还有元素返回真;
  4).previous() 返回上一个元素的值,并将指针前移1;
  5).nextIndex() 返回此时调用next()方法时返回的元素的索引;
  6).previousIndex() 返回此时调用previous()方法时返回的元素的索引;
  7).remove() 移除最近一次调用next()或previous()方法返回的元素(可选);
  8).set(E e) 用元素e将如果此时调用next()或previous()方法返回的元素替换掉;
  9).add(E e) 添加元素到此时调用next()返回的元素之前,或此时调用previous()返回的元素之后。

集合遍历的方法


List集合遍历三种方法

第一种、最基础的遍历方式:for循环,指定下标长度,使用List集合的size()方法,进行for循环遍历

import java.util.ArrayList;
public class Demo01 {
  public static void main(String[] args) {
   ArrayList<News> list = new ArrayList<News>();
    
   list.add(new News(1,"list1","a"));
   list.add(new News(2,"list2","b"));
   list.add(new News(3,"list3","c"));
   list.add(new News(4,"list4","d"));
   for (int i = 0; i < list.size(); i++) {
            News s = (News)list.get(i);
            System.out.println(s.getId()+"  "+s.getTitle()+"  "+s.getAuthor());
    }
  }
}

第二种、较为简洁的遍历方式:使用foreach遍历List,但不能对某一个元素进行操作(这种方法在遍历数组和Map集合的时候同样适用)

import java.util.ArrayList;
public class Demo02 {
  public static void main(String[] args) {
    ArrayList<News> list = new ArrayList<News>();
     list.add(new News(1,"list1","a"));
     list.add(new News(2,"list2","b"));
     list.add(new News(3,"list3","c"));
     list.add(new News(4,"list4","d"));
    for (News s : list) {
            System.out.println(s.getId()+"  "+s.getTitle()+"  "+s.getAuthor());
   }
  }
}

第三种、适用迭代器Iterator遍历:直接根据List集合的自动遍历

import java.util.ArrayList;
public class Demo03 {
  public static void main(String[] args) {
   ArrayList<News> list = new ArrayList<News>();
    
   list.add(new News(1,"list1","a"));
   list.add(new News(2,"list2","b"));
   list.add(new News(3,"list3","c"));
   list.add(new News(4,"list4","d"));
   
     Iterator<News> iter = list.iterator();
     while (iter.hasNext()) {
            News s = (News) iter.next();
            System.out.println(s.getId()+"  "+s.getTitle()+"  "+s.getAuthor());
    }
  }
} 
相关文章
|
1天前
|
Java 编译器 开发工具
Java基础学习笔记——idea篇
JDK由JRE(包含JVM和核心类库)和开发工具箱(如javac编译器和java运行工具)组成。Java项目结构包括Project、Module、Package和Class。IDEA快捷键包括:生成main方法(main psvm)、复制代码(Ctrl+D)、删除代码(Ctrl+Y/X)、格式化代码(Ctrl+Alt+L)、重命名(Shift+F6)等。
17 0
|
1天前
|
监控 负载均衡 Dubbo
|
1天前
|
前端开发 Java 数据安全/隐私保护
Java学习—GUI编程学习笔记
Java学习—GUI编程学习笔记
|
1天前
|
存储 Java
最新Java基础系列课程--Day10-IO流文件处理(一)
最新Java基础系列课程--Day10-IO流文件处理
|
1天前
|
存储 缓存 安全
《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
62 0
|
1天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
25 4
|
1天前
|
存储 前端开发 Java
java学习笔记
java学习笔记
63 0
|
1天前
|
缓存 分布式计算 Java
Java基础深化和提高-------IO流
Java基础深化和提高-------IO流
111 0
|
1天前
|
XML Java 数据格式
Spring5学习笔记——狂神说Java
Spring5学习笔记——狂神说Java
|
1天前
|
缓存 Java Apache
最新Java基础系列课程--Day10-IO流文件处理(三)
最新Java基础系列课程--Day10-IO流文件处理