Java高级部分--集合(2)

一.集合类

Java中数组与集合的比较
1.数组也是容器,它是定长的,访问较快,但是数组不会自动扩充
2.数组可以包含基本数据类型或引用类型的对象,而集合中只能包含引用类型的对象

Java中集合框架层次结构

Collection接口

1.一组称为元素的对象

2.一个Collection中可以放不同
类型的数据
1.是Set接口和List接口的父类
2.是否有特定的顺序以及是否允许重复,取决于它的实现

3.Set - 无序的集合;不允许重复  如:HashSet
4.List - 有序的集合;允许重复  如:ArrayList,LinkedList

Set接口
1.Collection的子接口
2.用来包含一组 无序无重复 的对象
3.无序-----是指元素存入顺序和集合内存储的顺序不同
4.无重复------两个对象e1和e2,如果e1.equals(e2)返回true,则认为e1和e2重复

Set接口的实现类 
1.HashSet-----HashSet的特性在于其内部对象的散列存取,即采用哈希技术
2.TreeSet-----TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的

List接口

1.Collection的子接口
2.用来包含一组 有序有重复 的对象
3.List中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素
4.List有两种主要的集合实现类:ArrayList,LinkedList

List接口的实现类
1.ArrayList是线性顺序存储的,是一种线性表
2.它的特性和数组很接近,数组大小是不变的,而ArrayList的大小是可以动态改变的

3.LinkedList最主要的功能方面的增强是可以在List的头部和尾部添加、删除、取得元素,直接提供了这些方法的实现

ArrayList与LinkedList的比较
  存储结构
1.ArrayList是线性顺序存储
2.LinkedList对象间彼此串连起来的一个链表
  操作性能
1.ArrayList适合随机查询的场合
2.LinkedList元素的插入和删除操作性高

Map接口
1.Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象
2.Map是不同于Collection的另外一种集合接口
3.Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的
  Map接口有两个实现
1.HashMap — key/value对是按照Hash算法存储的
2.TreeMap — key/value对是排序(按key排序)存储的

HashMap与TreeMap的比较
1.HashMap基于哈希表实现
2.TreeMap基于树实现
3.HashMap可以通过调优初始容量和负载因子,优化HashMap空间的使用
4.TreeMap没有调优选项,因为该树总处于平衡状态
5.HashMap性能优于TreeMap

Iterator接口
1.Iterator对象称作迭代器,用来方便的实现对容器内的元素进行遍历操作
2.所有实现了Collection接口的集合类都有一个iterator( )方法,返回一个实现了Iterator接口的对象
3.Iterator对象实现了统一的一个用来遍历Collection中对象的方法
4.Iterator是为遍历而设计,能够从集合中取出元素和删除元素,但是没有添加元素的功能
5.Iterator的功能上比较简单,使用中,只能单向移动

hasNext方法

用来判断指针右边是否还有数据

Next方法

将指针向右移动一次,将划过的数据取出来

Iterator<String>    iter=hs1.iterator();
           while(iter.hasNext()){       System.out.println( iter.next());  }

如何选择集合类
1.Set内存放的元素不允许重复,List存放的元素有一定的顺序
2.Map的应用主要在利用键/值对进行快速查询
3.ArrayList和LinkedList的区别在于随机查询性能上ArrayList要好,但LinkedList的中间元素的插入与删除性能好 
4.HashSet和TreeSet的区别在于集合内元素是否排序

collection接口

 1 package util1;
 2
 3 import java.util.Collection;
 4 import java.util.HashSet;
 5
 6 public class Collection1 {
 7
 8     /**
 9      * @param args
10      */
11     public static void main(String[] args) {
12
13         //实例化对象
14         Collection   c1=new HashSet();   //向上转型---  声明成接口类型,调用实现类的构造方法
15         Collection   c2=new HashSet();
16          //添加数据
17         c1.add(1);
18         c1.add("你");
19         c1.add(new  A());
20
21         System.out.println(c1);    //整体取出数据:直接输出集合名称
22
23         c2.addAll(c1);   //添加其他集合
24         System.out.println(c2.size());    //取集合长度
25         System.out.println(c2.contains("sgtht"));   //判断是否包含某些数据
26
27         System.out.println("///////////////");
28        Object  o[]    =c2.toArray();    //将集合转换成数组
29        /*for(int i=0;i<o.length;i++){
30            System.out.println(o[i]);
31        }*/
32
33          System.out.println(o[0]);
34          System.out.println(o[1]);
35          System.out.println(o[2]);
36
37
38     }
39
40 }

set集合

hashSet,treeSet

 1 package util1;
 2
 3 import java.util.HashSet;
 4 import java.util.Iterator;
 5 import java.util.TreeSet;
 6
 7 public class HashSet1 {
 8
 9     /**
10      * set接口的特点(集合)
11      *     hashset:   无顺序,数据不能重复,长度可扩展
12      *     treeset:  按照自然顺序排列数据,数据不能重复,能够比较大小
13      *
14      */
15     public static void main(String[] args) {
16
17           HashSet<String>   hs1=new HashSet<String>();
18           hs1.add("a");
19           hs1.add("b");
20           hs1.add("b");
21           hs1.add("c");
22 /*          System.out.println(hs1);
23
24           //挨个取出集合中的数据
25          Iterator<String>    iter=hs1.iterator();
26           while(iter.hasNext()){
27              System.out.println( iter.next());
28           }
29           */
30
31
32             TreeSet<Integer>   ts1=new TreeSet<Integer>();
33             ts1.add(1);
34             ts1.add(768);
35             ts1.add(43);
36             ts1.add(43);
37             ts1.add(87);
38             System.out.println(ts1);
39
40
41           //类型转换异常
42
43             TreeSet  ts2=new TreeSet();
44             ts2.add("adsf");
45             ts2.add("u11");
46             ts2.add("caa");
47             System.out.println(ts2);
48     }
49
50 }

list集合

linkedList

 1 package util1;
 2
 3 import java.util.HashSet;
 4 import java.util.Iterator;
 5 import java.util.LinkedList;
 6
 7 public class List1 {
 8
 9     /**
10      *    list(列表):   下标从0开始
11      *
12      *          linkedList:  方便首尾操作 ,    数据可重复,有顺序,长度可扩展
13      *          ArrayList:(数组列表)  :   数据可重复,有顺序,长度可扩展
14      *
15      */
16     public static void main(String[] args) {
17
18         LinkedList<Integer>   ll=new LinkedList<Integer>();
19         ll.add(1);
20         ll.add(454);
21         ll.add(454);
22         ll.add(454);
23         ll.add(454);
24         ll.add(242);
25         ll.add(0, 88);
26         //ll.add(10, 77);
27         System.out.println(ll);
28         ll.addFirst(66);
29         System.out.println(ll);
30         System.out.println(ll.get(4));    //按照下标取数据
31
32         System.out.println("///////////////////");
33
34         for(int i=0;i<ll.size();i++){
35             System.out.println(ll.get(i));
36         }
37
38         System.out.println("///////////////////");
39
40         Iterator<Integer>  it=ll.iterator();
41         while(it.hasNext()){
42             System.out.println(it.next());
43         }
44
45         System.out.println("///////////////////");
46         //foreach循环,增强的for循环------提高效率(封装了迭代器)
47           for(Integer   in:ll){
48               System.out.println(in);
49           }
50
51     }
52
53 }

map接口

hashmap集合

 1 package util1;
 2
 3 import java.util.HashMap;
 4 import java.util.Iterator;
 5 import java.util.Map;
 6 import java.util.Set;
 7 import java.util.Map.Entry;
 8
 9 public class Map1 {
10
11     /**
12      * map:数据成对存放
13      *     HashMap:  无序存放     key值不能重复,如果key值重复,会替换掉原来的键值对
14      *
15      *
16      */
17     public static void main(String[] args) {
18         //声明键值对容器
19         HashMap  hm1=new HashMap<String, String>();
20
21         hm1.put("1", "a");
22         hm1.put("2", "b");
23         hm1.put("2", null);
24         hm1.put("3", "c");
25       System.out.println(hm1);
26
27         Set  keys=hm1.keySet();   //将所有key值取出组合成一个set集合
28       /*   Iterator<String>   it=keys.iterator();
29           while(it.hasNext()){                  //循环所有key值
30         //    System.out.println(hm1.get(it.next()));      //根据key值获取value值
31           }*/
32
33
34         Map<String, String>  m1=new HashMap<String, String>();
35         //向上转型:  节省内存   ,可用接口中的方法,实现类重写的方法,不能用实现类独有的方法
36           m1.put("1", "a");
37           m1.put("2", "b");
38           m1.put("2", "c");
39           m1.put("3", "c");
40           System.out.println(m1);
41
42           Set<Map.Entry<String, String>>  ens=m1.entrySet();
43           for(Entry<String, String>  e:ens){
44                System.out.println(e.getKey());
45                System.out.println(e.getValue());
46           }
47
48     }
49
50 }

treemap集合

 1 package util1;
 2
 3 import java.util.TreeMap;
 4
 5 public class TreeMap1 {
 6
 7     /**
 8      *   treemap:   按照key值的自然顺序排列数据,要求key值可以比较大小
 9      */
10     public static void main(String[] args) {
11
12            TreeMap   tm1=new TreeMap<Integer, String>();
13            tm1.put(44, "gf");
14            tm1.put(4654, "gf");
15            tm1.put(42, "gf");
16            tm1.put(4, "gf");
17            System.out.println(tm1);
18           System.out.println(tm1.floorKey(5));   //得到小于参数的一个key值
19           System.out.println(tm1.floorEntry(5));  //得到小于参数的一个键值对
20
21     }
22
23 }

日期

 1 package util1;
 2
 3 import java.text.SimpleDateFormat;
 4 import java.util.Calendar;
 5 import java.util.Date;   //引包
 6
 7 public class Date1 {
 8
 9
10     public static void main(String[] args) {
11
12             //当前时间
13             Date   d1=new Date();    //当时的时间
14             System.out.println(d1);
15
16             SimpleDateFormat   sdf=new SimpleDateFormat("yyyy年MM月dd日   a hh:mm:ss");
17             String  time1=sdf.format(d1);
18             System.out.println(time1);
19
20
21             //日历类
22            Calendar   c= Calendar.getInstance();  //反转获得时间
23            c.set(2011,11,29);  //自定义的时间
24           System.out.println(c.get(Calendar.YEAR));
25
26     }
27
28 }
时间: 2024-08-08 11:51:43

Java高级部分--集合(2)的相关文章

java高级特性之集合概述

java中的集合概述 map 接口 总结 java集合学习 1 java中存储数据的方式 1 数组 (基本数据类型+引用数据类型).2 集合(对象) 数组存储数据的缺点1:数组一旦创建,长度固定 2:数组不能直接确定有效元素的个数 java中的集合概述: java集合接口:Collection 接口 和Map 接口 (Collection接口 表示不按照添加顺序存放对象的集合,而且集合内的元素可以重复即 无序可重复 集合,它是List,Set,Queue..接口的父接口) Collection

Java高级特性 第1节 集合框架和泛型

Java中,存储多个同类型的数据,可以用数组来实现,但数组有一些缺陷: 数组长度固定不变,布恩那个很好的适应元素数量动态变化的情况 可以通过数组.length获取数组长度,却无法直接获取数组中实际存储的元素个数 数组采用在内存中分配连续空间的方式存储,根据元素信息查找时的效率比较低,需要多次比较 Java提供了一套性能优良.使用方便的接口和类,他们都位于java.util包中. 一.Java中的集合 Java集合类主要由Map接口和Collection接口派生而来,Collection接口有两个

java高级之反射

--- android培训.java培训.期待与您交流! ---- java高级之反射 一 反射(类的加载概述和加载时机) A:类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. 连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据

9.9-全栈Java笔记:遍历集合的N种方式总结&Collections工具类

遍历集合的N种方式总结 [示例1]遍历List方法1,使用普通for循环 for(int i=0;i<list.size();i++){         //list为集合的对象名 String temp = (String)list.get(i); System.out.println(temp); } [示例2]遍历List方法2,使用增强for循环(使用泛型定义类型!) for (String   temp : list) { System.out.println(temp); } [示例

Java高级篇——网络通信

JAdam Java高级篇(二)--网络通信 网络编程是每个开发人员工具相中的核心部分,我们在学习了诸多Java的知识后,也将步入几个大的方向,Java网络编程就是其中之一. 如今强调网络的程序不比涉及网络的更多.除了经典的应用程序,如电子邮件.Web浏览器和远程登陆外,大多数主要的应用程序都有某种程度的内质网络功能.比如我们最常使用的IDE(Eclipse/IDEA)与源代码存储库(GitHub等等)进行通信:再比如Word,可以从URL打开文件:又或者是我们玩的众多联机游戏,玩家实时相互对战

转:成为Java高级程序员需要掌握哪些?

section 1 1.Core Java,就是Java基础.JDK的类库,很多童鞋都会说,JDK我懂,但是懂还不足够,知其然还要知其所以然,JDK的源代码写的非常好,要经常查看,对使用频繁的类,比如String,集合类(List,Map,Set)等数据结构要知道它们的实现,不同的集合类有什么区别,然后才能知道在一个具体的场合下使用哪个集合类更适合.更高效,这些内容直接看源代码就OK了 2.多线程并发编程,现在并发几乎是写服务端程序必须的技术,那对Java中的多线程就要有足够的熟悉,包括对象锁机

java面试题——java高级(二)

四.Java高级部分 1.红黑树的实现原理和应用场景: 1.(1)每个节点或者是黑色,或者是红色. (2)根节点是黑色. (3)每个叶子节点(NIL)是黑色. [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (4)如果一个节点是红色的,则它的子节点必须是黑色的. (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点. 注意: (01) 特性(3)中的叶子节点,是只为空(NIL或null)的节点. (02) 特性(5),确保没有一条路径会比其他路径长出俩倍.因而,红

千锋《Java高级教程+分布式+springcloud+微信支付》

课程目录:├─千锋Java高级教程-cas单点登录(完结-8集)│      01单点登录介绍│      02cas介绍│      03tomcat搭建https│      04cas server搭建│      05Cas 配置 jdbc 连接数据库│      06Cas 密码 MD5值│      07 Cas 整合shiro1│      07 Cas 整合shiro2│      ├─千锋Java高级教程-dubbo+zookeeper分布式系统架构基础(11集)│      

面试 Java 高级后端开发,要准备哪些知识点?

其实公司肯花时间让你去面试,前提条件一定是通过你的简历,一定发现了你和公司的匹配点,也就是说,一定是有录用意向的. 在技术面试的时间段里(最长1个小时),你如果能展现你的优势那是最好的,但如果你做不到这点,简单点,让面试官感觉你达到了最低标准即可.这好比在大学里考试,有些同学对某门课的知识点完全不懂,但也有可能通过考前突击和刷题来通过考试(不作弊),而且还有可能考高分. 至于通过技术面试后,项目经理或人事的面试一般是过滤特别差的,比如考察些团队协作能力和沟通表达能力等,这对大家来说应该不是问题.