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

在这里插入图片描述

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

Java学习笔记系列——孙不坚1208
【详细+超基础】Java-学习笔记 01
【详细+超基础】Java-学习笔记 02
【详细+超基础】Java-学习笔记 03
【详细+超基础】Java-学习笔记 04
【详细+超基础】Java-学习笔记 05
【详细+超基础】Java-学习笔记 06
【详细+超基础】Java-学习笔记 07
【详细+超基础】Java-学习笔记 08
【详细+超基础】Java-学习笔记 09
【详细+超基础】Java-学习笔记 10
【详细+超基础】Java-学习笔记 11
【详细+超基础】Java-学习笔记 12
【详细+超基础】Java-学习笔记 13
【详细+超基础】Java-学习笔记 14
【详细+超基础】Java-学习笔记 15

Java学习笔记系列持续更新中…

集合类

数组可以储存统一数据类型的数据,但长度固定,不适合在数组元素数量未知的情况下使用。集合弥补了数组的这一缺陷。集合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());

    }
  }
} 

欢迎订阅专栏 请你喝杯java , 希望能给需要帮助的朋友带来方便,同时也希望能得到各位大佬的建议。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

請你喝杯Java

感谢您的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值