《黑马程序员》Java集合泛型

 ——- android培训java培训、期待与您交流! ———-
一.java集合
在Java中有一个集合框架,用来表示一个操作集合。在Java ee平台中实现了一个新的集合框架,但是在先前的集合框架依然可以使用。这里的结合框架就是我们所说的集合类。一个集合是一种对象它表示了一组对象。集合框架主要是由一些抽象类、接口和一些实现类组成。所谓框架就是一个类库的集合。集合框架就是一个用来表示和操作集合的统一的架构,包含了实现集合的接口与类。在集合框架中有Collection、Sort、List、SortedSet、Map、SortedMap接口。
集合类接口的比较
Collection—-对象没有指定的顺序,允许重复元素
Set———–对象中没有指定的顺序,不允许指定元素
List———–对象之间有指定的顺序,允许重复元素
这三个接口继承关系为:Set List都继承Collection
其中Set有Hashset和Treeset两种:

|--HashSet:数据结构是哈希表。线程是非同步的。
            保证元素唯一性的原理:判断元素的hashCode值是否相同。
            如果相同,还会继续判断元素的equals方法,是否为true。
|--TreeSet:可以对Set集合中的元素进行排序。
            底层数据结构是二叉树。
            保证元素唯一性的依据:
            compareTo方法return 0.

            TreeSet排序的第一种方式:让元素自身具备比较性。
            元素需要实现Comparable接口,覆盖compareTo方法。
            也种方式也成为元素的自然顺序,或者叫做默认顺序。

            TreeSet的第二种排序方式。
            当元素自身不具备比较性时,或者具备的比较性不是所需要的。
            这时就需要让集合自身具备比较性。
            在集合初始化时,就有了比较方式。

演示List集合

class GenericDemo 
{
    public static void main(String[] args) 
    {
        ArrayList<String> al = new ArrayList<String>();
        al.add("abc01");//用add方法添加元素
        al.add("abc0991");
        al.add("abc014");
        //al.add(4);//al.add(new Integer(4));
        Iterator<String> it = al.iterator();
        while(it.hasNext())
        {
            String s = it.next();
            System.out.println(s+":"+s.length());
        }
    }
}

演示Set集合

package day15;
import java.util.*;
class TreeSetTest2 
{
    public static void main(String[] args) 
    {
        ArrayList al = new ArrayList();
        String str = "90 -7 0 18 2 45 4";
        String[] arr = str.split(" ");
        System.out.println(arr);
        TreeSet ts = new TreeSet();
        for(int x=0; x<arr.length; x++){
            ts.add(Integer.parseInt(arr[x]));//
        }
        System.out.println(ts);
    }
}

演示Map集合

package day16;
/*

Map
    |--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
    |--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
    |--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。


和Set很像。
其实大家,Set底层就是使用了Map集合。


*/
import java.util.*;
class  MapDemo
{
    public static void main(String[] args) 
    {
        Map<String,String> map = new HashMap<String,String>();
        //添加元素,添加元素,如果出现添加时,相同的键。那么后添加的值会覆盖原有键对应值。
        //并put方法会返回被覆盖的值。
        System.out.println("put:"+map.put("01","zhangsan1"));
        System.out.println("put:"+map.put("01","wnagwu"));
        map.put("02","zhangsan2");//用Map方法添加键值对
        map.put("03","zhangsan3");
        System.out.println("containsKey:"+map.containsKey("022"));
        //System.out.println("remove:"+map.remove("02"));
        System.out.println("get:"+map.get("023"));
        map.put("04",null);
        System.out.println("get:"+map.get("04"));
        //可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。
        //获取map集合中所有的值。
        Collection<String> coll = map.values();
        System.out.println(coll);
        System.out.println(map);
    }
}
map集合的两种取出方式:
1Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
    所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。


    Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。


2Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
                而这个关系的数据类型就是:Map.Entry

                Entry其实就是Map中的一个static内部接口。
                为什么要定义在内部呢?
                因为只有有了Map集合,有了键值对,才会有键值的映射关系。
                关系属于Map集合中的一个内部事物。
                而且该事物在直接访问Map集合中的元素。
                */

二.Java泛型
泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
好处
1,将运行时期出现问题ClassCastException,转移到了编译时期。方便于程序员解决问题。让运行时问题减少,安全。
2,避免了强制转换麻烦。
泛型格式:通过<>来定义要操作的引用数据类型。
在使用java提供的对象时,什么时候写泛型呢?通常在集合框架中很常见,
只要见到<>就要定义泛型。其实<> 就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
注意
泛型类定义的泛型,在整个类中有效。如果被方法使用,/那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
为了让不同方法可以操作不同类型,而且类型还不确定。
那么可以将泛型定义在方法上。
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。

泛型代码实例;

class Demo<T>//其中T为泛型
{
    public  void show(T t)
    {
        System.out.println("show:"+t);
    }
    public <Q> void print(Q q)
    {
        System.out.println("print:"+q);
    }
    public  static <W> void method(W t)
    {
        System.out.println("method:"+t);
    }
}
class GenericDemo4 
{
    public static void main(String[] args) 
    {
        Demo <String> d = new Demo<String>();
        d.show("haha");
        //d.show(4);
        d.print(5);
        d.print("hehe");

        Demo.method("hahahahha");
    }
}

三.总结
集合与泛型是Java中比较重要的部分,弄清楚各种集合存取元素的方式比较重要。笔者之前弄不清楚HashMap与Hashtable的区别,不明白Map集合的存取。建议读者弄清楚几种集合继承的关系。泛型就是把许多相同类型的对象封装起来。下面给出泛型使用注意事项总结:
1)、泛型到底代表什么类型取决于调用者传入的类型,如果没传,默认是Object类型;
2)、使用带泛型的类创建对象时,等式两边指定的泛型必须一致;原因:编译器检查对象调用方法时只看变量,然而程序运行期间调用方法时就要考虑对象具体类型了;
3)、等式两边可以在任意一边使用泛型,在另一边不使用(考虑向后兼容)//要保证左右两边的泛型具体类型一致就可以了,这样不容易出错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过融合先进技术,如物联网、大数据、人工智能等,实现校园的智能化管理与服务。政策的推动和技术的成熟为智慧校园的发展提供了基础。该方案强调了数据的重要性,提出通过数据的整合、开放和共享,构建产学研资用联动的服务体系,以促进校园的精细化治理。 智慧校园的核心建设任务包括数据标准体系和应用标准体系的建设,以及信息化安全与等级保护的实施。方案提出了一站式服务大厅和移动校园的概念,通过整合校内外资源,实现资源共享平台和产教融合就业平台的建设。此外,校园大脑的构建是实现智慧校园的关键,它涉及到数据中心化、数据资产化和数据业务化,以数据驱动业务自动化和智能化。 技术应用方面,方案提出了物联网平台、5G网络、人工智能平台等新技术的融合应用,以打造多场景融合的智慧校园大脑。这包括智慧教室、智慧实验室、智慧图书馆、智慧党建等多领域的智能化应用,旨在提升教学、科研、管理和服务的效率和质量。 在实施层面,智慧校园建设需要统筹规划和分步实施,确保项目的可行性和有效性。方案提出了主题梳理、场景梳理和数据梳理的方法,以及现有技术支持和项目分级的考虑,以指导智慧校园的建设。 最后,智慧校园建设的成功依赖于开放、协同和融合的组织建设。通过战略咨询、分步实施、生态建设和短板补充,可以构建符合学校特色的生态链,实现智慧校园的长远发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值