java学习笔记9.23(集合)

集合接口:

java类库将集合的接口和实现分离。队列的实现:循环数组和链表;前者更高效,后者没有上限。

AbstractQueue类用于用户自己实现队列类。

cllection(extends Iterable<E>)接口:基本方法1.add 2 iterator(next;hasnext;remove)

Collection<E> coll=new Collection<>();

Iterator<String> iter=coll.iterator();

while (iter.hasNext()){

  String a = iter.next();

  do something with a......

}

增强for循环(要求实现了iterable接口):

for(string a in c){do something with a......}

iterable接口:iterator方法返回一个实现Iterator接口的对象;

iterator接口:hasnext,next,remove方法

1将迭代器视为位于两个元素之间。2必须先next,再remove

ohter methods:contains.......

AbstractCollection类实现了Collection接口:让实现Collection接口更加方便,除了iterator和size被抽象化,contains以及其他方法都提供了例行方法。

除了以map结尾的(实现map接口),其他集合都实现clloctive接口

具体的集合:

链表:

public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable

ListItertor迭代器:

有序集合,使用迭代器添加元素。interface ListItertor<E> extends Iterator<E>{void add(E element); E previous(); boolean hasprevious();(反向遍历链表)}

想在链表中间插入元素:1.调用链表listIterator(),返回一个listIterator迭代器对象 2.调用迭代器中的add方法

两个迭代器之间的冲突

使用get方法获得元素,导致效率低,可能使用了错误的数据结构。每次get之前都会从头重新开始搜索。

List.listlistIterator(n)

使用链表的理由:减少在列表中插入或删除元素所付出的的代价

避免在链表中实现整数索引:get(n),set(n),ListIerator(n),如果要进行这种随机访问最好用Arraylist。

注意迭代器所在位置,如果调用next后,add了一个元素,则此时迭代器在add的元素后面。

ArrayList:可以随机的访问每个元素的集合类。

散列集:

散列冲突,桶数目通常为元素的75%到150%,且为素数,以防集聚。装填因子为0.75时,以双倍桶数进行再散列

hashset:add,contains已被重写

迭代器访问时随机的,不关心元素中的顺序时使用。

树集(有序集合):添加元素比散列表慢,比数组或链表快。查找复杂度:log2n

对象的比较:

构造器:

TreeSet(Comparator<? super E> comparator) compartor接口实现int copare(T a , T b)方法,将实现了这一接口的对象传入Treeset的构造器,告诉Treeset如何对对象进行比较(不同集合中实现不同的比较方式,对象的类中没有实现compareable接口)

函数对象,通常动态定义。

映射表:

时间: 2024-10-29 15:27:36

java学习笔记9.23(集合)的相关文章

Java学习笔记29(集合框架三:泛型)

泛型的概念: 简单地讲,就是同一个方法(类),可以接受不同的数据类型并运行得到相对应的结果,不会出现安全问题 上一篇有一段这样的代码: 没有定义集合类型.迭代器类型 package demo; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class CollectionDemo { public static void main(String[] args)

Java学习笔记30(集合框架四:List接口)

List接口继承自Collection接口 具有重要的三大特点: 1.有序集合:存入和取出的顺序一致 2.此接口的用户可以对列表中每个元素插入位置精确的控制:可以通过索引操作 3.可以存储重复元素 List接口的特有方法(与索引有关): package demo; import java.util.List; import java.util.ArrayList; //List接口继承Collection接口,下有很多实现类 //例如ArrayList public class ListDemo

Java学习笔记33(集合框架七:Collections工具类)

数组有工具类,方面操作数组 集合也有工具类:Collections 常用方法示例: package demo; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class CollectionDemo { public static void main(String[] args) { function1(); function2(); function3(); } p

Java学习笔记32(集合框架六:Map接口)

Map接口与Collection不同: Collection中的集合元素是孤立的,可理解为单身,是一个一个存进去的,称为单列集合 Map中的集合元素是成对存在的,可理解为夫妻,是一对一对存进去的,称为双列集合 Map中存入的是:键值对,键不可以重复,值可以重复 Map接口中的常用集合: 1.HashMap:哈希表的存储结构,但是无法保证存取顺序 2.LinkedHashMap:存储数据采用的是哈希表和链表,可以有顺序 Map接口的常用方法: 示例: package demo; import ja

Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)

规则: 1.54张扑克牌,有花色 2.顺序打乱,一人一张依次发牌,一人17张,留三张作为底牌 3.看牌:按大小王2A....43的序排列打印 示例: package demo; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class DouDiZhu { public static void main(String[] args) { // 创建Map集合,键

【原】Java学习笔记026 - 集合

1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 需求:从三国演义中评选出四个最帅的武将,并存储下来 6 7 // 因为具备了面向对象的思想,所以创建四个对象来存储 8 Hero hero1 = new Hero("张飞", 18); 9 Hero hero2 = new Hero("赵云", 16); 10 Her

Java学习笔记_25_Collections类

25.Collections类: Collections类是一个工具类,用来对集合进行操作,它主要是提供一些排序算法,包括随机排序.反相排序等. Collections类提供了一些静态方法,实现了基于List容器的一些常用算法. Collections的一些方法列表: · void sort(List): 对List内的元素进行排序. · void shuffle(List): 对List内的元素随机排序. · void reverse(List): 对List内的元素进行逆序排列. · voi

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

java学习笔记13--比较器(Comparable、Comparator)

java学习笔记13--比较器(Comparable.Comparator) 分类: JAVA 2013-05-20 23:20 3296人阅读 评论(0) 收藏 举报 Comparable接口的作用 之前Arrays类中存在sort()方法,此方法可以直接对对象数组进行排序. Comparable接口 可以直接使用java.util.Arrays类进行数组的排序操作,但对象所在的类必须实现Comparable接口,用于指定排序接口. Comparable接口的定义如下: public  int