【学习笔记】7集合

1、集合

集合最主要的作用就是存储和读取数据的。

collection单列:list(可重复)-------Arraylist+link,set(不可重复)------hashset+treeset

map双列-------hashmap(没有排序),treemap(对键进行排序)

collection集合:

是单例集合的顶层接口,它表示一组对象,这些对象也成为collection的元素。

jdk不提供此接口的任何直接实现,它提供更具体的子接口实现,eg:set list

创建collection的对象:堕胎的形式;具体实现类arraylist。

 Collection<String> c = new ArrayList<String>();
        c.add("hello");
        c.add("world");
        System.out.println(c);//[hello, world]

add(E e):添加元素。

remove:从集合中移除指定元素。

clear:清空集合中的元素。

contains:判断集合中是否存在指定元素。

isEmpty:判断集合是否为空。

size():集合的长度。

1.1collection集合的遍历

iterator:返回次集合的迭代器。集合专用的遍历方式。

x.next():返回迭代的下一个元素。

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

if(l.hadnext()){
sout(x.next());
}

1.2 list集合

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

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

特点:有序,可重复。先进先出。

List<String> list = new ArrayList<String>();
        list.add("he");
        list.add("jddhfj");
        list.add("kk");
//        System.out.println(list);
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
​

list集合的特有方法

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

remove(int index):删除指定索引的元素。返回被删除的元素。

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

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

List<Student> list = new ArrayList<Student>();
        Student s1 = new Student("z",1);
        Student s2 = new Student("a",2);
        Student s3 = new Student("b",3);
        list.add(s1);
        list.add(s2);
        list.add(s3);
        Iterator<Student> it = list.iterator();
        while(it.hasNext()){
            Student s = it.next();
            System.out.println(s.getAge()+","+s.getName());
        }
//1,z
2,a
3,b

并发修改异常

concurrenrmodificationexception

用迭代器的时候,因为里面有了一个add操作,所以实际修改次数不等于预期修改次数,所以爆出并发修改异常,将迭代器变成.get()方法就可以了。

 Iterator<Student> it = list.iterator();
        while(it.hasNext()){
            Student s = it.next();
            if(s.equals("world")){//里面有world,所以会进入这个if函数中。所以两个次数不一样。
            list.add("jdfhdsjhfjksd")
            }
        }

ListIterator

是list特有的列表迭代器。

需要导包。

允许程序院沿着任意方法遍历列表。再迭代期间可以获取当前迭代器的位置。

常用方法:

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

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

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

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

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

        List<String> c = new ArrayList<String>();c.add("hello");
        c.add("world");
        ListIterator<String> it = c.listIterator();
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("---------");
        //逆向遍历
        while(it.hasPrevious()){
            String s = it.previous();
            System.out.println(s);
        }

void add(E e):将指定元素插入列表。迭代器的add方法。没有并发修改异常。

列表迭代add方法中,会将实际修改值,赋值给预期修改值。所以两个一样/相等所以不会出现并发修改异常。

 List<String> c = new ArrayList<String>();
        c.add("hello");
        c.add("world");
        c.add("java");
        ListIterator<String> it = c.listIterator();
        while(it.hasNext()){
            String s = it.next();
            if(s.equals("world")) {
                it.add("jdfhdsjhfjksd");
            }
        }
        System.out.println(c);//[hello, world, jdfhdsjhfjksd, java]

增强for循环

增强for循环:简化数组和collection集合的遍历。实现Iterable接口的类允许其对象成为增强for语句的目标。

内部原理是一个Iterator迭代器。

格式:

for(元素数据类型 变量名:数组或者collection集合){
//再此处使用变量即可,该变量就是数组或者集合中的该元素。
}
int[] arr={1,2,3,4,5};
for(int i:arr){
sout(i)
}

简化了遍历集合或者数组。

list集合存储学生对象用三种方式遍历

List<Student> list = new ArrayList<Student>();
        Student s1 = new Student("z",1);
        Student s2 = new Student("a",2);
        Student s3 = new Student("b",3);
        list.add(s1);
        list.add(s2);
        list.add(s3);
        Iterator<Student> it = list.iterator();
//迭代器
        while(it.hasNext()){
            Student s = it.next();
            System.out.println(s.getName()+","+s.getAge());
        }
        System.out.println("-----------");
//for
        for(int i=0;i< list.size();i++){
            Student s =list.get(i);
            System.out.println(s.getName()+","+s.getAge());
        }
        System.out.println("-----------");
//增强for
        for(Student s:list){
            System.out.println(s.getName()+","+s.getAge());
        }

1.3 数据结构-栈+队列+数组+链表

数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或者多种特定关系的数据元素的集合。

栈:先进后出。

进入栈的过程叫做压栈或者进栈。

离开栈的过程叫做弹栈或者出战。

先进去的是栈底元素。后进去的是栈顶元素。

入队列-出队列。

队列:先进先出

数组:

查询效率高,删除效率低。删除原始数据,后面的数据需要往前挪

添加数据时,添加位置的数据的后面都要往后移动。添加效率低。

链表:**

一个节点,有数据+地址。

增加和删除快。

单查询必须从头查询。具体过程再本子上。

1.4 list集合子类的特点

arraylist:数组,查询快,增加删除比较慢。

linkedlist:链表,增删快,查询慢。

 ArrayList<String> arr = new ArrayList<String>();
        arr.add("hello");
        arr.add("my");
        arr.add("dear");
        Iterator<String> it = arr.iterator();
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
        LinkedList<String> l = new LinkedList<String>();
        l.add("helloh");
        l.add("myh");
        l.add("dearh");
        Iterator<String> it2 = l.iterator();
        while(it2.hasNext()){
            String s2 = it2.next();
            System.out.println(s2);
        }

1.5Linkedlist集合的特有功能

addFirst(E e):再该列表开头插入指定元素

addLast(E e):在该列表末尾插入指定元素。

getFirst():返回此列表的第一个元素。

getLast():返回此列表的组后一个元素。

removeFist():从此列表中删除并返回第一个元素。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值