Java基础复习2(集合List和Set)

List集合

1、List集合的特点:

  • 有序的:存储和取出的元素顺序是一致的

  • 可重复:存储的元素是可以重复的

2、List的特有方法:

  • add(需要插入元素的位置,需要插入的元素) 在集合中的指定位置插入元素;

  • remove() 删除索引处的元素,并返回该元素

  • set(需要修改元素的位置,修改后的元素) 指定索引处的元素,返回被修改的元素;

  • get() 返回指定索引处的元素

package List;

import java.util.ArrayList;
import java.util.List;

/**
 * list集合的操作是带索引的,索引不能越界
 */

public class ListDemo02 {
    public static void main(String[] args) {
        List<String> list =new ArrayList<String>();
        list.add("java");
        list.add("hallo");
        list.add("world");
        list.add("java");
        //输出集合的数据
        System.out.println(list);

        //add(3,"lqv"),在指定的3下标位置添加数据lqv
        System.out.println("在三号下标处添加元素lqv");
        list.add(3,"lqv");
        System.out.println(list);

        //remove(1) ,删除指定索引处的元素,并显示出来
        System.out.println("删除指定索引处的元素,并显示出来");
        String jj=list.remove(1);
        System.out.println(list);
        System.out.println("返回发元素是:"+jj);

        //set(需要修改元素的位置,修改后的元素)   修改指定索引处的元素,返回被修改的元素;
        System.out.println("修改指定索引处的元素,返回被修改的元素");
        String dd=list.set(2,"lisi");
        System.out.println(list);
        System.out.println("修改的元素是:"+dd);

        //get()   返回指定索引处的元素

        System.out.println("返回三号下标的元素");
        String s = list.get(3);
        System.out.println(s);
        System.out.println("--------");
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

    }
}

3、Listlterator迭代器

它是通过Listlterator()方法得到的,所以说它是List集合特有的迭代器

package List;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Listlterator {
    public static void main(String[] args) {
        //创建List集合
        List<String> list=new ArrayList<String>();

        //添加元素
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("world");

        /**
         * Listlerator迭代器
         * 通过List集合,得到Listlterator()的方法;
         */
        ListIterator<String> lit=list.listIterator();

        /*//正向遍历
        while (lit.hasNext()){
            System.out.println(lit.next());
        }
        System.out.println("---------");
        //反向遍历
        while (lit.hasPrevious()){
            System.out.println(lit.previous());
        }*/

        //add()  该方法是将制定元素插入列表
        while (lit.hasNext()){
            String s = lit.next();
            if(s.equals("world")){
                lit.add("javaee");
            }
        }
        System.out.println(list);

    }
}

4、List的两个子类

  • ArrayList: 它的底层数据结构是数组,查询快,增删慢

  • LinkedList:它的底层数据结构是链表,查询慢,增删快

set集合

1、set集合的特点:不包含重复的元素的,没有带索引的方法,所以set是不支持普通的for循环的方法的;

2、哈希值:是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值,

3、对象的哈希值特点:

  • 同一个对象多次调用hashCode(方法返回的哈希值是相同的

  • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

4、Hashset

  • 底层的数据结构是哈希表

  • 不会有重复的元素,不支持普通的for遍历,实现的顺序会变化

public class set {
    public static void main(String[] args) {
        //创建一个hashSet对象
        HashSet<List_Student> hs=new HashSet<List_Student>();

        //实例化一个学生对象
        List_Student LS1 = new List_Student("java",23);
        List_Student LS2 = new List_Student("李四",23);
        List_Student LS3 = new List_Student("张三",25);
        List_Student LS4 = new List_Student("java",23);

        //添加数据
        hs.add(LS1);
        hs.add(LS2);
        hs.add(LS3);
        hs.add(LS4);

        //for循环遍历

        for (List_Student a:hs){
            System.out.println(a.getName()+","+a.getAge());
        }
    }
}

5、LinkedHashSet

  • LinkedHashSet集合特点:

    • 哈希表和链表实现的Set接口,具有可预测的迭代次序

    • 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的

    • 由哈希表保证元素唯一,也就是说没有重复的元素

6、TreeSet

  • 不包含重复的元素,没有索引不能用普通的for循环;

  • 元素有序,元素的存储和取出是有序的,构造方法决定了具体的排序方式

    • TreeSet():根据元素的自然顺序进行排列

    • TreeSet(Comparator comparator):有参构造是按照比较器进行比较的

public class TreeSetDemo {
    public static void main(String[] args) {
        //创建一个TreeSet集合对象
        TreeSet<Integer> Ts=new TreeSet<Integer>();

        //向集合中插入数据
        Ts.add(30);
        Ts.add(20);
        Ts.add(15);
        Ts.add(80);
        Ts.add(7);
        Ts.add(60);

        Ts.add(60);

        //遍历输出数据
        for (Integer s:Ts){
            System.out.println(s);
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值