java数据结构

在接触了java的这段时间内发现java帮我们coder做了很多很多事情,让编程变得更简单了,但同时也让coder变得更白痴了.就像很多公司的java coder,在app里面,好像不是数组就是arraylist,固之然arraylist的确很好用,可以随机访问、自动增加容量的数组.这东西在我学习C的时候是从来没出现过的,或者可以说不敢想象能做的出来,而java就帮我们的coder实现了,但也像我之前说的,让我们变得更笨了,好像任何时候用arraylist就可以了,那事实是真的这样吗?
例如存储不可重复的元素,例如操作多删除和多插入的数据,这时候arraylist肯定不是最好的选择.作为程序员,脑袋肯定不能是死的,也不能按部就班,不能有"我知道怎么用就好的想法".所以今天我就复习一下java的数据结构

数据元素之间的相互关系:
1.集合结构


集合结构.png

2.线性结构

线性结构.png

3.树状结构


树状结构.png

4.图形结构


图形结构.png

在存储结构中又可以分为(即在内存或者外置存储器中存储的方式):
1.顺序存储结构


顺序存储结构.png

2.链式存储结构


链式存储结构.png

那么在java中主要的表现形式分为2种:
1:collection

集合体系结构.png

2.MAP
MAP分为:

Hashtable 和hashmap

先从简单的说起,java中的表现形式:
1.collection
list
arraylist
vector
linkedlist
set
hashset
treeset

他们的区别可以这么分
1.list是一个有序的,有索引,可以重复的,可以说怎么存,就怎么取出来
2.set是无序的,而且不可以重复

LIST的区别
1.arraylist的底层是一个数组,因为数组的特性,所以修改成员就很方便了,少量的增删改查也是比linekedlist要好的.这也是日常开发中经常使用到的list.但是正是因为他是线程不安全的,所以速度快
2.linekedlist的底层是一个链表,而且是一个双向的链表.那么在删除和增加上面就有天生的优势,只需要修改头结点和尾节点就好了,但是只要涉及到类似索引的问题就会慢起来
3.vector是线程安全的数组,不过早就被谷歌抛弃了

SET的区别
1.hashset的底层排序用的是hash算法,需要重写hashcode和equad.
2.treeset的底层用的是二叉树的排序算法,但是treeset有两种排序方式:
a:自然排序(comparable):
treeset类的add()方法中会把存入的对象提升为comparable类型
调用对象的compareto()方法和集合中的对象比较
根据comparato()方法返回的结果进行存储

      b:比较器顺序(comparator):
          创建treeset的时候可以指定一个比较器(comparator)
           如果传入了comparator的子类对象,那么treeset就会按照比较器中的顺序排序
            add()方法内部会自动调用comparator接口中的compara方法排序

那么我们讲讲list和set的遍历区别:

  • 1.List
    • a.普通for循环, 使用get()逐个获取
    • b.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
    • c.增强for循环, 只要可以使用Iterator的类都可以用
    • d.Vector集合可以使用Enumeration的hasMoreElements()和nextElement()方法
  • 2.Set
    • a.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
    • b.增强for循环, 只要可以使用Iterator的类都可以用
  • 3.普通for循环,迭代器,增强for循环是否可以在遍历的过程中删除

2.MAP
hashtable
hashmap

map的表现形式就是键值对,唯一的键,但是值不是唯一,当键是自定义对象的时候,必须要重写hashcode和equal方法才可以形成唯一性

MAP迭代的方式有两种:
1:keyset

            HashMap<String, Integer> hm = new HashMap<>();
            hm.put("张三", 23);
            hm.put("李四", 24);
            hm.put("王五", 25);
            hm.put("赵六", 26);
            
            /*Set<String> keySet = hm.keySet();         //获取集合中所有的键
            Iterator<String> it = keySet.iterator();    //获取迭代器
            while(it.hasNext()) {                       //判断单列集合中是否有元素
                String key = it.next();                 //获取集合中的每一个元素,其实就是双列集合中的键
                Integer value = hm.get(key);            //根据键获取值
                System.out.println(key + "=" + value);  //打印键值对
            }*/
            
            for(String key : hm.keySet()) {             //增强for循环迭代双列集合第一种方式
                System.out.println(key + "=" + hm.get(key));
            }

2:entryset

            HashMap<String, Integer> hm = new HashMap<>();
            hm.put("张三", 23);
            hm.put("李四", 24);
            hm.put("王五", 25);
            hm.put("赵六", 26);
            /*Set<Map.Entry<String, Integer>> entrySet = hm.entrySet(); //获取所有的键值对象的集合
            Iterator<Entry<String, Integer>> it = entrySet.iterator();//获取迭代器
            while(it.hasNext()) {
                Entry<String, Integer> en = it.next();              //获取键值对对象
                String key = en.getKey();                               //根据键值对对象获取键
                Integer value = en.getValue();                          //根据键值对对象获取值
                System.out.println(key + "=" + value);
            }*/
            
            for(Entry<String,Integer> en : hm.entrySet()) {
                System.out.println(en.getKey() + "=" + en.getValue());
            }

java给collections提供了一些常用的算法:

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

推荐阅读更多精彩内容