Java-Day04-集合

在昨天,笔者曾表明要在不久的将来会专门开一个有关集合的专题,没想到这一天这么快就到了,在复习的第四天我们就把Java中有关集合的概念具体的说说,下面开始正式的内容。

一. 复习与回顾

在昨天的最后我们复习了有关集合的具体含义(它是一种专门装东西的玩意儿),它和显示生活中的练习(比如衣柜,和药箱,不过他们有不同的存储规则,还记得吗?),最后介绍了遍历集合的方法,也就是迭代器。在今天,我会扩展一下集合的知识,大家注意看哦!

二. 泛型

泛型了规定类,集合,方法所能接受的数据类型,如果你说,如果接受的数据类型与规定的数据类型不一样,编译器不会报错吗?为什么要单独设置泛型的概念呢?确实,但如果穿进来的数据他的数据类型是不确定的呢?这时我们就可以用E 来设置if语句来分类讨论。

1. 含有泛型的类

public class A <E>{
private E name;
A <integer> a=new A<>(); }

我们没法向类中传入参数,但是我们可以向类的成员方法中传入参数,这时候类的泛型就有了意义,需要注意的是如果类的泛型与方法的泛型所规定的字符不一,比如过一个是E,一个是T,那么类的方法中仍然可以传递方法中所规定的参数。

2. 含有泛型的方法

public <m> void B(m b){}

3. 泛型通配符<?>

通配符可以接受所有的引用数据类型,在方法没有规定泛型之前,如果我们有<Object>接受参数,那么就会报错,因为Object与其他类是平行的关系,不存在继承关系,但是我们有<?>就可以解决这个问题。(简化代码?没怎么感觉其实。。)?是所有类型的超类,只能用Object中的方法,一般与extends和super一起,声明边界。

三. List接口

1. 特点

有序、带索引、允许储存相同的元素

2. 特有方法

add()、get()、remove()、set()

3. ArrayList实现了List接口

优势:查询快,曾删慢
原因是ArrayList的底层实现是一个数组,数组的优势就是查询非常的快,不过呢这个数组是随时变化的,也就是每次往里面添加一个元素,便重新建立一个数组,这就导致增删会很慢。

4. LinkedList

几种方法:
pop() removeFirst() 拿走第一个数据
push() addFirst() 添加第一个数据
remove() 拿走最后一个数据

四. set接口

1. 特点

不允许有相同的元素、无索引
主要是HashSet、LinkerHashSet实现了该接口
如果想遍历,要用迭代器实现,因为没有索引!

2. 几个概念

  • 哈希值:一个十进制的整数,每一个数据都会有一个哈希值,如果我们把该十进制的数转化为16进制,那么就成了我们所说的地址值。Object中有求哈希值的方法HashCode,String类重写了HashCode方法。
  • 哈希表:一个数组加上链表(防止哈西冲突)
  • 储存自定义的元素:要重写HashCode 和equals方法,确包HashSet不重复。
  • 可变参数:方法的参数类型确定,但是参数的个数不确定,我们可以用一个下表不确定的数组来储存,具体例子:
    method(int...arr) 其中arr为数组。

五. Collection中的常见操作

以下都是静态方法,也就是可以直接通过类名来访问。

  1. Collection.addAll(List,参数列表)直接添加多个元素
  2. shuffel (list)打乱集合的顺序
  3. sort (list)排序
    注意:list中的元素必须实现了comparable接口,重写了comparaTo方法
    排序规则1
  4. sort(list<T> list ,comparator<? super T>)
    注意:实现comparator接口中的compare方法
    排序规则2

    即ret<0时,语义上等价于o1<o2;
    ret==0时,语义上等价于o1==o2;
    ret>0时,语义上等价于o1>o2.

六. Map集合

Map集合是一个双列集合,有两个泛型,一个是关键字Key,一个是值Value,两个是一对一的关系,在一个Map中,Key是不能重复的。

1. 常用的实现类

HashMap和LinkedHashMap

2. 常用的方法

  • V put(K key ,V Value)添加,成功的话返回值
  • V get(Object key)获取,成功的话返回值
  • V remove(Object key)删除,成功的话返回被删除的值
  • boolean containsKey(Object key)看看是否有这个Key

3. 遍历Map

  • KeySet(),把该Map对象中的所有key取出,并添加到Set数组中(期间可以用增强For遍历),然后获得通过Key利用get方法获得value。
  • 利用内部接口Entry
    实现步骤:

1,调用Map集合中的entrySet()方法,将集合中的映射关系对象存储到Set集合中
2,迭代Set集合(增强For循环的话,接受的对象类型应该是Map.Entry<K,V>,因为Entry的类型是静态的,可以通过类名调用)
3,获取Set集合的元素,是映射关系的对象
4,通过映射关系对象的方法,getKey()和getValue(),获取键值对

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容