java 容器类_java容器排序

java 容器类_java容器排序Java的容器在Java中,我们想要保存对象可以使用很多种手段。最简单的就是数组。但是数组具有固定的尺寸,而通常来说,程序总是在运行时根据条件来创建对象,我们无法预知将要创建对象的个数以及类型,所以Java推出了容器类来解决这一问题。Java容器的基本概念Java容器类库是用来保存对象的,他有两种不同的概念:Collection,独立元素的序列,这些元素都服从一条或多条规则。Lis…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Java的容器

在Java中,我们想要保存对象可以使用很多种手段。最简单的就是数组。但是数组具有固定的尺寸,而通常来说,程序总是在运行时根据条件来创建对象,我们无法预知将要创建对象的个数以及类型,所以Java推出了容器类来解决这一问题。

Java容器的基本概念

Java容器类库是用来保存对象的,他有两种不同的概念:

  1. Collection,独立元素的序列,这些元素都服从一条或多条规则。List、Set以及Queue都是Collection的一种,List必须按照顺序保存元素,而Set不能有重复元素,Queue需要按照排队规则来确定对象的顺序。
  2. Map,Map是键值对类型,允许用户通过键来查找对象。Hash表允许我们使用另一个对象来查找某个对象。

Collection和Map

在Java容器中一共定义了2种集合, 顶层接口分别是Collection和Map。但是这2个接口都不能直接被实现使用,分别代表两种不同类型的容器。

简单来看,Collection代表的是单个元素对象的序列,(可以有序/无序,可重复/不可重复 等,具体依据具体的子接口Set,List,Queue等);Map代表的是“键值对”对象的集合(同样可以有序/无序 等依据具体实现)

java 容器类_java容器排序

java 容器类_java容器排序

Collection接口

Collection是最基本的集合接口。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”。所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。

看一下Collection的部分源码 

   /** 
     * @return collection包含元素的个数 
     */
int size();    
    /** 
     * @return 判断collection是否为空,为空返回true,不为空返回false 
     */  
boolean isEmpty();  
    /** 
     *如果指定的元素的类型与这个集合不兼容,则抛出类型转换异常 
     *@return 判断collection是否包含元素与o相等,假如 o != null,判断set中是否有元素与o相等,
     * 有返回true,没有返回false。假如o == null,抛出空指针异常
     */  
 	boolean contains(Object o);  
 /** 
     * 返回包含ollection所有元素的Iterator 
     */ 
    Iterator<E> iterator();  
     /** 
     * 返回collection所有包含元素的array 
     */  
    Object[] toArray();  
   /** 
     * 返回一个包含collection元素的指定类型的数组 
     */ 
    <T> T[] toArray(T[] a);  
     /** 
     * 插入元素,假如当前collection中存在元素与e相等,那么保持原collection不改变,返回false, 
     * 否则插入元素,并返回true 
     */  
    boolean add(E e);  
      /** 
     * remove类似于这样的元素(o == null? e == null : o.equals(e)),并返回true 
     */  
    boolean remove(Object o);  
    boolean containsAll(Collection<?> c);  
    boolean addAll(Collection<? extends E> c);  
    boolean retainAll(Collection<?> c);  
    boolean removeAll(Collection<?> c);  
    void clear();  
    boolean equals(Object o);  
    int hashCode();  
}

Map接口

Map也是一个接口,一个map不能包含重复的key,每个key只能映射唯一一个value。Map接口是用来取代Dictionary抽象类的。Map接口提供三个集合视图,1.key的集合 2.value的集合 3.key-value的集合。map内元素的顺序取决于Iterator的具体实现,获取集合视图其实是获取一个迭代器,实现对遍历元素细节的隐藏。

同样,map的实现类应该提供两个“标准”构造器,一个无参构造器用来创建一个空map,一个只有一个参数,参数类型是map的构造器,用来创建一个新的和传入参数有一样key-value映射的map。实际上,后者允许复制任何一个map,这仅仅是一个建议,并没有强制要求,因为接口是无法包含构造器的,不过这个建议在JDK被遵守。

如果一个方法的操作是不被支持的,这个方法指定抛出UnsupportedOperationException异常。如果这个操作对map是没有影响的,那么也可以不抛出UnsupportedOperationException异常。例如,在一个不能被修改的map调用putAll(Map)方法,如果该map的映射是空的,就不要求抛出UnsupportedOperationException异常。

看一下部分源码:

/**
*返回map中key-value映射的数量
*/
int size();
/**
*如果map中没有key-value映射返回true
*/
boolean isEmpty();

/**
*如果map不含key映射,返回false,当key的类型不符合,抛出ClassCastException,当key是
*null且该map不支持key的值是null时,抛出NullPointerException
*/
boolean containsKey(Object key);

/**
*如果map含有一个以上的key映射的参数value,返回true,异常抛出的情况和containKey一样
*/
boolean containsValue(Object value);

/**
*根据key得到对应的value,如果没有对应的映射,返回null,如果map允许value为null,返回
*null可能是有一对key-null的映射或没有对应的映射
*/
V get(Object key);

/**
*往map放入一对key-value映射
*/
V put(K key, V value);

/**
*根据key删除对应映射
*/
V remove(Object key);

/**
*复制一份与参数一样的map
*/
void putAll(Map<? extends K, ? extends V> m);

/**
*清空map中所有的映射
*/
void clear();

/**
*返回map中所有key的集合
*/
Set<K> keySet();

/**
*返回map中所有value的集合
*/
Collection<V> values();

/**
*返回key-value的集合
*/
Set<Map.Entry<K, V>> entrySet();

/**
*比较调用者与参数是否相等
*/
boolean equals(Object o);

/**
*计算map的hash code
*/
int hashCode();
}

粗略的了解一下,我们在接下来的文章再好好研究

 

参考:

http://blog.csdn.net/u014136713/article/details/52089156

https://www.tianmaying.com/tutorial/java_collection

https://www.jianshu.com/p/047e33fdefd2

https://www.cnblogs.com/13jhzeng/p/5560676.html

https://www.jianshu.com/p/047e33fdefd2

http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

https://blog.csdn.net/qq_37910658/article/details/73835078

https://blog.csdn.net/ns_code/article/details/35564663

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194556.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python用vscode还是pycharm_菜鸟VS高手

    python用vscode还是pycharm_菜鸟VS高手点击“开发者技术前线”,选择“星标????”在看|星标|留言,真爱作者|SohaibAhmad译者|鹿未来,责编|屠敏也许是我有些落伍,或者也是因为JetBrains…

    2022年8月28日
    9
  • stl merge函数使用

    stl merge函数使用merge函数的作用是:将两个已经排好序的序列合并为一个有序的序列。函数参数:merge(first1,last1,first2,last2,result,compare);firs1t为第一个容器的首迭代器,last1为第一个容器的末迭代器;first2为第二个容器的首迭代器,last2为容器的末迭代器;result为存放结果的容器,comapre为比较函数(可略写,默认为合并为…

    2022年6月8日
    43
  • idea入门与实战(实战训练)

    工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下:假设小组中有两个人,组长小张,组员小袁场景一:小张创建项目并提交到远程Git仓库场景二:小袁从远程Git仓库上获取项目源码场景三:小袁修改了部分源码,提交到远程仓库场景四:小张从远程仓库获取小袁的提交场景五:小袁接受了一个新功能的任务,创建了一个分支并在分支上开发场景六:小袁把分支提交到远程Git仓库场景七…

    2022年4月11日
    51
  • redis性能测试,测试并发性能

    redis性能测试,测试并发性能

    2021年8月21日
    78
  • jdbc java_Springdata

    jdbc java_Springdata刚进公司,人生地不熟,偷偷藏着本《mybatis入土为安》,以为可以靠mybatis混的轻松点,谁知天有不测风云,大家用的是JPA。我这个小白没有听说过,全英文名叫,就是java持久化api,是SUN公司推出的一套基于的规范。持久化想必如雷贯耳,都0202年了,谁还不用个持久化框架啊,举起mybatis。ORM呢?全英文名为:对象关系映射,简单来说为了不用JDBC那一套原始方法来操作数据库,ORM框架横空出世(mybatis、hibernate等等)。…

    2022年10月20日
    4
  • 推荐四款非常好用的免费音乐播放器

    推荐四款非常好用的免费音乐播放器不知道大家在工作的时候,是不是跟我一样,喜欢听着自己熟悉的旋律,心情也会很好。但是,原来的很多经典歌曲,要么改收费一首歌几块钱、要么是翻唱的,听起来也没有原版好,对于我们这些只是偶尔听听歌的、写写东西的人来说,的确有点不方便。今天,小莫为大家挑选了四个,截止到目前还能正常使用,并且功能十分强大的音乐播放器,歌曲都是免费的,建议低调收藏。1、音乐社一款很简洁的音乐播放器,涵盖了主流播…

    2022年6月26日
    137

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号