Java SE-容器/集合

2019-03-02 23:42|来源: 网路

  1. 1.集(Set)
       Set集合中不区分元素顺序
       Set集合中不允许出现重复元素(“重复元素”是指按照equals方法判断为等价对象)
    2.列表(List)
       List集合区分元素顺序(记录元素加入的顺序)、允许包含重复的元素
       List的基本特征是将其元素以线性方式存储
    3.映射(Map)
       映射中保存成对的“键-值”(Key-Value)信息,检索数据(Map集合中元素)时必须提供相应的"键",才能找到其    所映射的元素"值"。Map集合中不能包含重复的键,且每个键最多只能映射一个值

    4.Collection及Map接口
       java.util.Collection接口是描述Set和List集合类型的根接口,其中定义了有关集合操作的普遍方法,主要包括:
            boolean add(Object o):向集合中添加元素,成功返回true,否则false
            boolean remove(Object o):从集合中移除指定的元素,移除操作成功则返回true,否则false
            int size():返回集合中元素的数目
            boolean isEmpty:判断集合是否为空
            boolean contains(Object o):判断集合是否包含指定元素
            Iterator iterator():返回在此该集合的元素上进行迭代的迭代器
            Object[] toArray():返回包含当前集合中所有元素的数组
            void clear():移除当前集合中的所有元素

  2. Collection接口:
    /** *容器的学习 *学习Collection接口,其子接口:Set和List *实现Set接口的类:HashSet *实现List接口的类:LinkedList和ArrayList * *@study-jarek * */
    
    import java.util.*;//javaSDk所提供的容器API位于java.util中
    public class TestCollection2 { public static void main(String args[]) { //HashSet类(存储的数据无顺序,且不重复)
            Collection c1 = new HashSet(); c1.add("sun java");//添加的参数为Object类型
            c1.add(new Integer(100)); c1.add(new Person("jarek", 23)); System.out.println(c1); c1.remove("sun java"); System.out.println(c1.remove(new Person("jarek", 23))); System.out.println(c1); //ArrayList类(存储的数据有顺序,可重复)
            Collection c2 = new ArrayList(); c2.add("java sun"); c2.add(new Integer(120)); c2.add(new Person("Miss", 19)); System.out.println(c2); c2.remove(new Integer(120));//Integer类中重写了equals方法
            /* 自定义的类型,需要重写equals和hashCode方法 以实现自定义对象相等的规则 */ System.out.println(c2.remove(new Person("Miss", 19)));//若Person类未重写equals方法,则打印false
     System.out.println(c2); } } class Person { private String name; private int age; Person(String name, int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } public String toString() { return "姓名:"+name+"—"+age; } //重写equals方法和hashCode方法
        public boolean equals(Object obj) { if(obj instanceof Person) { Person p = (Person)obj; Integer a = new Integer(p.age); Integer b = new Integer(age); return (name.equals(p.name)) &&(b.equals(a)); } return super.equals(obj); } public int hashCode() { return name.hashCode(); } }

     

  3. Iterator接口:
    /** *Iterator Interface *所有实现了Collection接口的容器都有一个Iterator方法 *用来返回一个实现了Iterator接口的对象 *Iterator对象称作迭代器,用来方便的实现对容器内元素的遍历 * *@study-jarek * */
    import java.util.*; public class TestIterator { public static void main(String args[]) { Collection c = new HashSet(); c.add(new Family("jarek", 23, 361)); c.add(new Family("jelly", 21, 134)); c.add(new Family("storm", 22, 888)); c.add(new Family("casdffg", 22, 1231)); c.add(new Family("adadadaf", 43, 1434)); Iterator i = c.iterator(); while(i.hasNext()) { //next()的返回值是Object类型,需要转换为相应类型
                Family f = (Family)i.next(); System.out.print(f.getName()+" "); } for( Iterator a = c.iterator(); a.hasNext();) { Family f1 = (Family)a.next(); if(f1.getName().length()<6) { a.remove(); //c.remove(name);出错,不能用原来容器自身的remove方法,Iterator循环内部,执行了锁定,锁定当前元素。
     } } System.out.println(c); } } class Family { private String name; private int age; private int id; Family(String name, int age, int id) { this.name = name; this.age = age; this.id = id; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setId(int id) { this.id = id; } public String getName() { return name; } public int getAge() { return age; } public int getId() { return id; } public String toString() { return name+"_"+age+"_"+id; } }

     

    Iterator的方法:
  4. 增强的for循环:
    /** *增强的for循环 *对于遍历array和Collection的时候相当简便 *数组:缺陷,不能方便的访问下标值 *集合:与使用Iterator相比,不能方便的删除集合中的内容 *在内部也是调用Iterator *除了简单的遍历并读出其中的内容外,不建议使用 * *@study-jarek * */
    import java.util.*; public class TestEnhanceFor { public static void main(String args[]) { int[] arr = { 1, 2, 3, 4, 5, 6}; for( int i : arr ) { System.out.print(i+" "); } System.out.println(); Collection c = new ArrayList(); c.add("aaa"); c.add("bbb"); c.add("ccc"); for( Object o : c ) { System.out.println(o); } } }

     


转自:http://www.cnblogs.com/study-jarek/p/3684253

相关问答

更多
  • java se和Java ee[2022-03-22]

    java se 是sun公司的标准开发包。因为其中的功能不需要依靠任何其他公司的技术支持就可以独立使用的,所以java se基本上可以用来制作小应用程序和桌面应用程序。 java ee 是sun公司的企业开发包,也可以叫做标准。因为企业应用通常需要使用到很多其他公司的服务,比如数据库,比如web服务器。 这个包大部分都是一些接口,而非完整的实现。 这些接口是提供给这些服务提供的公司来使用,他们在自己的服务上完成java ee的接口实现,既然大家使用的是同样的接口,就意味着你只要针对这些接口来编写程序就可以方 ...
  • java中没有需要背的代码。和C语言不同,其实C语言也不用背。。呵呵 几十个关键字 现在都有插件。java中也有这种功能。。关键是逻辑性的东西 ..编程思想... 各种算法..这些东西都要试着去理解。而不是死记硬背...多做题..如果是做游戏开发 里面也会涉及到一些数学公式。三角函数,勾股定理..之类的 其他的也没什么了..至于大学的数学课程 基本用不到什么。。
  • JAVA SE学习内容[2022-04-17]

    J2SE 面向对象-封装、继承、多态 内存的分析 递归 集合类、泛型、自动打包与解包、Annotation IO 多线程、线程同步 TCP/UDP AWT、事件模型、匿名类 正则表达式 反射机制
  • java se和Java ee[2022-04-28]

    java se 是sun公司的标准开发包。因为其中的功能不需要依靠任何其他公司的技术支持就可以独立使用的,所以java se基本上可以用来制作小应用程序和桌面应用程序。 java ee 是sun公司的企业开发包,也可以叫做标准。因为企业应用通常需要使用到很多其他公司的服务,比如数据库,比如web服务器。 这个包大部分都是一些接口,而非完整的实现。 这些接口是提供给这些服务提供的公司来使用,他们在自己的服务上完成java ee的接口实现,既然大家使用的是同样的接口,就意味着你只要针对这些接口来编写程序就可以方 ...
  • Java se 是学安卓和Java ee的基础,JavaScript是脚本语言,Javaweb就是Java ee
  • 容器是指放东西的物品,在JAVA里面也是这样的,比如 list 是可以用来放对象的列表 你也可以自定义一些类来放其它对象,那么,你定义的这个类就是其它对象的容器。 集合是一组可变数量的数据项,集合的种类包括列表,集,多重集,树和图,通俗地讲就是这么一堆东西。
  • 如何安装java SE[2022-03-21]

    1. 下载和安装Java SE 登录Oracle官方网站下载最新版的Java SE Development Kit, 然后像安装其他软件那样安装就OK了, 值得注意的是不要选择默认的安装路径, 因为默认的安装路径中带有空格,这很可能带来某些问题.假设我们安装到C:\Applications\Java\jdk1.5.0_16路径下. 2. 设置环境变量 PATH 右击我的电脑(My Computer)选择属性(Properties),依次选择高级(Advanced),环境变量(Environment Vari ...
  • Weld不是Java SE运行时。 Weld是cdi-specification 1.0及其更高版本的实现。 WELD-SE是在现有JRE中运行的CDI-Beans的容器。 更常见的是,Weld在其他容器中用作模块,如Glassfish,JBoss7,Wildfly,根据JSR-Spec管理CDI-Beans。 Weld is not a Java SE runtime. Weld is an implementation of cdi-specification 1.0 and later version ...
  • 不,只有一个子集可用,请参阅http://java.sun.com/javame/technology/index.jsp以获取简介。 这篇维基百科文章给出了简要的概述: 值得注意的限制 与Java SE环境相比,几个API完全不存在,并且一些API被更改,因此代码需要显式更改才能支持CLDC。 特别是,某些更改不仅仅是缺少类或接口,而是实际上更改了基类库中现有类的签名。 一个例子是没有Serializable接口,由于反射用法的限制,它没有出现在基类库中。 因此,通常实现Serializable所有jav ...
  • 如果你继续阅读,我认为答案会得到相当清楚的解释。 在段落的后面: ...这是因为所有应用程序代码都在容器管理的线程上运行,并且每个容器通常都希望对容器提供的对象的所有访问都发生在同一个线程上。 这允许容器管理资源并提供集中管理。 此外,不鼓励以非托管方式使用资源,因为它可能会破坏平台旨在提供的企业功能,例如可用性,安全性,可靠性和可伸缩性。 我可以看到为什么你提出了你的初步问题,初始陈述的措辞有点令人困惑。 回答你的问题: Java EE容器不必显式阻止您以您期望的方式调用这些API(例如,如果您尝试使用它 ...