Java中关于集合的学习(一看就会(全方位笔记))

集合和数组的特点对比:

  • 集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生变化

  • 数组和集合的区别:

    • 共同点:都是存储数据的容器

    • 不同点:数组的容量是固定的,集合的容量是可变的

1、arrayList

  • public ArrayList():创建一个空的集合对象

  • public boolean add(E e):将指定的元素追加到此集合的末尾

  • public void add(int index,E element):在此集合中的指定位置插入指定的元素

注意:集合容器中如果没有加入<>就可以存储任意数据类型

<>泛型:对集合容器存储的数据类型进行限制

 //创建集合容器对象
        ArrayList list = new ArrayList();
        //ArrayList<String> list = new ArrayList<>();
        //调用对象的add方法,向容器中添加数据
        list.add("aaa");
        list.add(123);
        list.add(true);
        list.add(0,666);//可以插队

ArrayList集合常用的方法:

  • public boolean remove(Object o):删除指定的元素,返回删除hi否成功

    • 注意:根据元素进行删除,只能删除集合中的第一个元素

  • public E remove(int index):删除指定索引处的元素,返回被删除的元素

  • public E set(int index,E element):修改指定索引处的元素,返回被修改的元素

  • public E get(int index):返回指定索引处的元素

  • public int size()::返回集合中的元素的个数

2、Connection

connection集合常用方法:

  • boolean add(E e) :添加元素

  • boolean remove(Object o):从集合中移除指定元素

  • void clear():清空集合中的元素

  • boolean contains(Object o):判断集合中是否存在指定的元素

  • boolean isEmpty():判断集合是否为空

  • int size():集合的长度,也就是集合中元素的个数

Connection集合的遍历:

Iterator:迭代器,集合的专用遍历方式

  • Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到

  • 迭代器是通过集合的iterator()方法得到的,所以我们说它是依赖于集合而存在的

    Connection<String> c = new ArrayList<>();
    Iterator<String> it = c.iterator();          

Iterator中常用的方法:

  • E next():返回迭代中的下一个元素

  • boolean hasNext():如果迭代具有更多元素,则返回true

3、List

list集合概述:

  • 有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素

  • 与Set集合不同,列表通常允许重复的元素

lisy集合特点:

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

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

List集合特有的方法,collection集合没有的,它的儿子ArrayList集合有的

  • void add(int index,E element):在此集合中的指定位置插入指定的元素

  • E remove(int index):删除指定索引处的元素,返回被删除的元素

  • E set(int index,E element):修改指定索引处的元素,返回被修改的元素

  • E get(int index):返回指定索引处的元素

ListIterator:列表迭代器

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

  • 用于允许程序员沿任怡方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

ListIterator中常用的方法:

  • E next():返回迭代中的下一个元素

  • boolean hasNext():如果迭代具有更多元素,则返回true

  • E previous():返回列表中的上一个元素

  • boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true

  • void add(E e):将指定的元素插入列表

List集合常用子类:Array List、LinkedList

  • Array List:底层数据结构是数组,查询快。增删慢

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

    • LinkedList:集合特有的功能入下

    • public void addFirst(E e):在该列表开头插入指定的元素

    • public void addLast(E e):将指定的元素追加到此列表的末尾

    • public E getFirst():返回此列表中的第一个元素

    • public E getLast():返回此列表中的最后一个元素

    • public E removeFirst():从此列表中删除并返回第一个元素

    • public E removeLast():从此列表中删除并返回最后一个元素

LinkedHashSet集合特点:

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

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

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

4、增强for循环

增强for:简化数组和Collection集合的遍历

  • 实现Iterable接口的类允许其对象成为增强型for语句的目标

  • 他是jdk5之后出现的,其内部元素是一个Iterator迭代器

增强for的格式

for(元素数据类型 变量名:数组或者Collection集合){
    //在此处使用变量即可,该变量就是元素
}
//例如
int[] arr = {1,2,3,4,5};
for(int i : arr){
    System.out.println(i);
}

5、哈希值

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

Object类中有一个方法可以获取对象的哈希值

  • public int hashCode():返回对象的哈希码值

对象的哈希值特点

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

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

6、HashSet集合

hashSet特点:

  • 底层数据结构是哈希表

  • 对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致

  • 没有带索引的方法,所以不能使用普通for循环遍历

  • 由于是Set集合,所以不包含重复元素的集合

HashSet<String> hs = new HashSet<>();
        hs.add("hello");
        hs.add("world");
        hs.add("java");
        for(String s : hs){
            System.out.println(s);
        }
        //控制台输出的结果并不是按照添加顺序的
        //输出:world,java,hello
        hs.add("java");
        for(String s : hs){
            System.out.println(s);
        }
        //输出的还是world,java,hello,所以hashSet不包含重复元素的

HashSet集合存储学生对象时,在学生类中要重写hashCode()和equals()方法

7、TreeSet集合

TreeSet集合特点:

  • 元素有序,这里的顺序不是指存储顺序和取出顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法:

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

    • TreeSet(Comparator comparator):根据指定的比较器进行排序

  • 没有带索引的方法,所以不能使用普通for循环遍历

  • 由于是Set集合,所以不包含重复元素的集合

 TreeSet<Integer> ts = new TreeSet<>();
    ts.add(10);
    ts.add(20);
    ts.add(50);
    ts.add(40);
    ts.add(30);
    ts.add(30);
    for(Integer i:ts){
        System.out.println(i);
    }
//会输出:10,20,30,40,50///不会有重复,会自己排序

自然排序Comparable的使用:

//在学生类里实现方法:
//然后重写compareTo()方法
public int compareTo(Student s){
    //按照年龄从小到大排序
    int num = this.age-s.age;
    //年龄相同时,按照姓名的字母顺序进行排序
    int num2 = num==0?this.name.compareTo(s.name):num;
    return num2;
}

8、泛型

泛型:是jdk5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型,它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数

提到参数,最熟悉的就是定义方法时有形参,有调用此方法时传递的实参。那么参数化类型怎么理解呢?

顾名思义,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型

这种参数类型可以用在类、方法和接口中,分别被称为泛型类,泛型方法,泛型接口

泛型定义格式:

  • <类型>:指定一种类型的格式。这里的类型可以看成是形参

  • <类型1,类型2...>:指定多种类型的格式,多种类型之间用逗号隔开。这里的类型可以看作是形参

  • 将来具体调用时候给定的类型可以看成是实参,并且实参的类型只能是引用数据类型

9、可变参数

可变参数又被称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了

  • 格式:修饰符 返回值类型 方法名(数据类型...变量名){ }

  • 范例:public static int sum(int...a){ }

可变参数注意事项:

  • 这的变量是一个数组

  • 如果有多个参数,包含可变参数,可变参数放最后

    • 例如:public static int sum(int a,int...b){}

10、Map集合

Map集合概述:

Interface Map<K,V>  K:键的类型; V:值的类型

讲键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值

//创建Map集合的对象
    //多态的方式
    //集体的实现类HashMap
Map<string,String> map = new HashMap<>();
map.put("it001","林青霞");
map.put("it002","张曼玉");
map.put("it003","王祖贤");
map.put("it003","柳岩");//当这个键第二次出现时,里面的值会把上一个的值替换掉
System.out.println(map);

Map集合的基本功能:

V put(K key,V value)        添加元素

V remove(Object key)       根据键删除键值对元素

void clear()                       移除所有的键值对元素

boolean containsKey(Object key)      判断集合是否包含指定的键

boolean containsValue(Object value)        判断集合是否包含指定的值

boolean isEmpty()                判断集合是否为空

int size()                                集合的长度,也是集合中键值对的个数

11、collections概述和使用

Collections类是针对集合操作的工具类

Collections常用方法:

 public static <T extends Comparable<?super T>> void sort(List<T> list):将指定的列表按升序排序

public static void reverse(List<?> list):反转指定列表中元素的顺序

public static void shuffle(List<?> list):使用默认的随机源随机排列指定的列表

关于集合的学习笔记就分享到这里啦,先收藏然后放入自己的记事本,配合这案例慢慢去敲去领悟它吧】】】

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java+每天进步亿点点

一起学习一起进步一起高薪

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

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

打赏作者

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

抵扣说明:

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

余额充值