02_java基础_数组、集合、枚举

来源:互联网 发布:look it over 编辑:程序博客网 时间:2024/05/17 05:53

------- android培训、java培训、.net培训、IOS培训 期待与您交流! ----------

数组

数组可以存放一组相同类型的数据,具有固定长度,在内存中占用连续的存储空间

数组的两种定义方式

(1)int array[] =new int[10];

(2)int a[] = {0,1,2};

数组对象的常用方法

Arrays.asList()方法:将数组当作参数传进去,根据数组创建ArrayList
Arrays.binarySearch()方法:根据参数的不同,实现不同功能的搜索,具体使用可以临时查看Eclipse的提示。
Arrays.copyOf()方法:根据参数的不同,复制不同的指定的数组,返回指定长度的数组。
Arrays.copyOfRange()方法:复制指定数组的指定范围,并返回复制的结果。
Arrays.equals(传两个数组进来):返回两个数组是否彼此相等,若相等返回true。
Arrays.fill():根据参数不同实现对数组的不同赋值操作。
Arrays.hashCode():基于参数数组的不同,返回不同的哈希码。
Arrays.sort():将数组传进去可以进行排序,具体请临时参看Eclipse提示。
Arrays.toString():传进去一个数组,返回数组内容的字符串表示形式。

Set

HashSet类

HashSet不允许出现重复元素;
不保证集合中元素的顺序;
允许包含值为null的元素,但最多只能有一个null元素。
HashSet如何使用,下面的代码中有体现:
package cn.itcast.api.c.set;import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator; public class HashSetTest1 {        /**        * @param args        */       public static void main(String[] args) {                     HashSetTest1 test = new HashSetTest1();              test.testHashSet();       }                     public void testHashSet(){              //实例化HashSet对象              HashSet hs = new HashSet();                           //添加第一个元素              hs.add(new String("第一个元素"));//HashSet的add方法如此使用                           //创建一个ArrayList对象,添加两个元素              ArrayList list = new ArrayList();              list.add("第二个元素");              list.add("第三个元素");                           //把ArrayList对象添加到HashSet中              hs.addAll(list);//HashSet的addAll方法如此使用                           //在HashSet中添加一个元素              hs.add("第四个元素");                           //添加一个null元素              hs.add(null); //HashSet允许存在null元素,但是最多只能有一个元素值为null                           System.out.println("/n通过转换成数组遍历的结果:");              System.out.println("HashSet中的数据如下:");              this.show2(hs);                           System.out.println("/n通过得到Iterator遍历的结果:");              hs.remove("第一个元素");//hs的remove方法如此使用              System.out.println("删除\"第一个元素\"之后:");              this.show1(hs);                           System.out.println("HashSet中元素的个数为:"+hs.size());//hs的size方法如此使用              if(hs.isEmpty()){                     System.out.println("HashSet是空的");              }              else{                     System.out.println("HashSet不是空的");              }               System.out.println("清空所有的元素:");              hs.clear();//hs的clear方法如此使用,效果是清空hs中所有元素。              if(hs.isEmpty()){                     System.out.println("HashSet是空的");              }              else{                     System.out.println("HashSet不是空的");              }       }             /*        * 得到Iterator,然后遍历输出        */       public void show1(HashSet hs){              Iterator i = hs.iterator();//hs的iterator方法如此使用,返回一个Iterator对象。              while(i.hasNext()){                     String temp = (String)i.next();                     System.out.println(temp);              }                  }             /*        * 转换成数组,遍历并输出HashSet中的元素        */       public void show2(HashSet hs){              Object o[] = hs.toArray();//HashSet的toArray方法如此使用,返回hs对应的数组。              for(int i=0;i<o.length;i++){                     System.out.println((String)o[i]);              }       } }
TreeSet类
TreeSet的性能比 HashSet差但是我们  在需要排序的时候可以用TreeSet  因为他是
自然排序也就是 升序 

package cn.itcast.api.c.set;import java.util.*;class TreeSetTest1{     private static  TreeSet<Point> ts=new TreeSet<Point>() ;        public static void main(String []args)  {   ts.add(new Point(2,3));   ts.add(new Point(1,7));   ts.add(new Point(8,8));   ts.add(new Point(1,3));   ts.add(new Point(0,4));    Iterator i=ts.iterator();  //迭代器   while(i.hasNext())   {    System.out.println(i.next());   }  }}class  Point implements Comparable   //实现 Comparable 接口  插入到TreeSet集合中的必须实现的 { int x,y; Point(int x,int y) {  this.x=x;  this.y=y; } Point() {  this.x=this.y=0; } public int compareTo(Object o)  //实现 compareTo函数 {  Point p=(Point)o;  int num=x>p.x?1:(x==p.x?0:-1) ;  if(num==0)    return y>p.y?1:(y==p.y?0:-1);  return num ;   } public String toString() {  return "x="+x+",y="+y; }}

List的特点

ArrayList和LinkedList的区别

ArrayList 用数组形式保存对象,将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引,但是缺点就是查找非常麻烦 要丛第一个索引开始

ArrayList小测试

import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class ArrayListTest {public static void main(String[] args) {List list = new ArrayList();list.add(new Student1("lisi1",21));list.add(new Student1("lisi2",22));list.add(new Student1("lisi1",21));list.add(new Student1("lisi2",22));list.add(new Student1("lisi1",21));getSingleElement(list);//去除重复元素。System.out.println(list);}/* * 案例:去除List集合中的重复元素。 *  * 思路: * 1,先创建一个临时容器。用于存储唯一性的元素。 * 2,遍历原容器,将遍历到的元素到临时容器中去判断,是否存在。 * 3,如果存在,不存储到临时容器,如果不存在,存储到临时容器中。 * 4,遍历结束后,临时容器中存储的就是唯一性的元素。 * 5,如果需要将这些唯一性的元素保留到原容器中,只要将原容器清空,将临时容器中的元素添加到原容器中即可。 *  */public static void getSingleElement(List list){//1,创建一个临时容器。List temp = new ArrayList();//2,遍历原容器。for (Iterator it = list.iterator(); it.hasNext();) {Object obj = it.next();//对遍历到的每一个元素都到临时容器中去判断是否包含。if(!temp.contains(obj)){//如果不存在,temp.add(obj);//添加到临时容器。}}//唯一性的元素已经被记录到临时容器中。//清空原容器中的元素。list.clear();//把临时容器中的元素添加到原容器中。list.addAll(temp);}}class Student1 implements Comparable {private String name;private int age;public Student1() {super();}public Student1(String name, int age) {super();this.name = name;this.age = age;}/** * 重写hashCode方法,建立Student对象的hash值算法内容。 通过学生对象特有数据姓名和年龄值来算出hash值。 */@Overridepublic int hashCode() {final int NUMBER = 24;return name.hashCode() + age * NUMBER;// 乘以24(随意)为了尽量保证hash值不同// return 1;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}/** * 重写了equals方法,建立Student对象判断相同的依据。 */@Overridepublic boolean equals(Object obj) {System.out.println("equals");if (this == obj)return true;if (!(obj instanceof Student1)) {throw new ClassCastException();}Student1 stu = (Student1) obj;return this.name.equals(stu.name) && this.age == stu.age;}/** * 重写compareTo方法,建立学生的自然排序(对象的默认排序方式)。 * 按照学生年龄排序。 */@Overridepublic int compareTo(Object o) {if(!(o instanceof Student1)){throw new ClassCastException();}Student1 stu = (Student1)o;/* * 注意:在比较时,必须明确主次。主要条件相同,继续比较次要条件。 */int temp = this.age - stu.age;return temp==0?this.name.compareTo(stu.name):temp;}}

LinkedList

package cn.itcast.api.b.list.subclass;import java.util.LinkedList;public class LinkedListDemo {/** * OK * @param args */public static void main(String[] args) {/* *  * 特有性质:因为LinkedList是以链表形式存放的,所以是围绕头和尾展开定义的。First Last。 * addFirst(); * addLast(); *  * getFirst();:获取头部元素。 * getLast(); *  * removeFirst();获取头部元素,并删除头部元素。 * removeLast(); */LinkedList link = new LinkedList();link.addFirst("abc1");link.addFirst("abc2");link.addFirst("abc3");while(!link.isEmpty()){System.out.println(link.removeFirst());//remove也是有返回值的}System.out.println(link.isEmpty());//true}}

Map的特点

Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。

HashMap如何使用

import java.util.*;public class Test{public static void main(String[] args){HashMap map = new HashMap();System.out.println("当前map中有" + map.size() + "个元素");map.put("学习委员", "zhangsan");map.put("生活委员", "lisi");map.put("体育委员", "wangwu");System.out.println("当前map中有" + map.size() + "个元素");System.out.println("这班的生活委员是:" + map.get("生活委员"));map.remove("生活委员");System.out.println("当前map中有" + map.size() + "个元素");}}

TreeMap如何使用

TreeMap用的不是很多,它是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单,用put(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。

枚举类

枚举的简单介绍
枚举很像一个特殊的类,可以有自己的变量,可以有自己的方法,还可以实现一个或多个接口。

什么时候使用枚举
当我们需要使用一个数据集的时候,比如 周一到周日 ,比如 春夏秋冬四个季节 等都可以使用没觉进行定义,使用枚举表示这些数据,能够实现对这些数据的更好的使用。

如何使用枚举

简单的枚举创建
<span style="font-family:SimSun;font-size:10px;">public enum ColorEnum {        red, green, yellow, blue;    }</span>
除了可以为枚举添加属性之外,还可以为其添加方法。
<span style="font-family:SimSun;font-size:10px;">public enum SeasonEnum {         spring, summer, autumn, winter;        private final static String position = "test";        public static SeasonEnum getSeason() {            if ("test".equals(position))                return spring;            else                return winter;        }    }</span>
如果枚举定义到了某个类的内部,那么枚举要放在最前面,否则会编译出错。

还可以实现有构造器的枚举
<span style="font-family:SimSun;font-size:10px;">public enum Gender{        MAN("MAN"), WOMEN("WOMEN");                private final String value;        Gender(String value) {            this.value = value;        }                public String getValue() {            return value;        }    }</span>



------- android培训、java培训、.net培训、 IOS培训 期待与您交流! ----------

0 0