【详细+超基础】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());
    }
  }
} 
相关文章
|
4月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
88 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
28天前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
43 0
|
3月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
3月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
3月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
2月前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
44 0
|
2月前
|
Java 程序员 开发工具
java学习笔记
java学习笔记
41 0
|
3月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
本文是“Java学习路线”中Java基础知识的高级篇,主要对多线程和反射进行了深入浅出的介绍,在多线程部分,详细介绍了线程的概念、生命周期、多线程的线程安全、线程通信、线程同步,并对synchronized和Lock锁;反射部分对反射的特性、功能、优缺点、适用场景等进行了介绍。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
|
4月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
60 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)