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
- 02_java基础_数组、集合、枚举
- 黑马程序员_Java基础加强_枚举
- 黑马程序员_Java基础_集合框架
- 黑马程序员_Java基础_集合框架
- 黑马程序员_java基础_集合框架
- 黑马程序员_张孝祥_Java基础加强_枚举类
- 黑马程序员_Java基础_数组
- 黑马程序员_Java基础_数组_04
- 黑马程序员_java基础_函数&数组
- 黑马程序员_Java基础_数组
- 黑马程序员_Java语言基础_数组
- 黑马程序员_java基础_枚举部分1.5的新特新
- 黑马程序员_java基础加强_静态导入_反射_枚举_注解_内省_泛型_代理
- 黑马程序员_Java基础_集合框架1
- 黑马程序员_Java基础_集合框架2
- 黑马程序员_Java基础_集合(Map类)
- 黑马程序员_Java基础_集合框架(一)_14
- 黑马程序员_Java基础_集合框架(二)_15
- BZOJ1059【ZJOI2007】矩阵游戏
- ios 在storyboary上布置uiwebview时出现的黑边
- zoj 1649 Rescue
- PHP算法大全
- 机器学习实战ByMatlab(一)KNN算法
- 02_java基础_数组、集合、枚举
- 【Objective-C学习-3】@property和@synthesize
- shell 脚本切换用户
- android developer tools下载地址
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
- PHP部分常见算法
- 机器学习实战ByMatlab(二)PCA算法
- Android学习系列(33)--App应用之提交到各大市场渠道
- linux 内核模块编程