标签:check 子类 text 数据结构 getc 下标 注意 定义 数组
java编程中,装其他各种各样的对象(引用类型)的一种东西,叫容器
注意:
1、数组的长度是固定的
2、集合:长度不固定, 可以随时添加和删除,只要不超出内存, 随便往里添加
1、Collection(包括List接口和Set接口)
List---(有顺序, 可以重复-->可以互相equals(引用类型))---下标(重复的标准就是相互equals)
LinkedList(链表)---(改快,查慢)
*ArrayList(数组)---(改慢,查快)
Set---(没有顺序, 不可以重复)
*HashSet(hash码表)(必须重写hashCode()方法)
TreeSet(二叉树---数据结构)
2、Map(键值对,每次往里放的时候都是一对一对的)(键不能重复,既不能相互equals)
*HashMap
TreeMap
3、Comparable(一个方法(comparaTo))
4、Iterator(循环遍历, 3个方法)
boolean hasNext()
Object next()
remove()
用法:
while(hasNext()) {
next()
}
1、Collection接口的使用
Collection<String> c = new ArrayList<String>();
问题: 为什么不直接写ArrayList<String> a = new ArrayList<String>();
2、c.add(参数类型必须是Object)
3、c.remove方法: 通过判断两个对象是否互相的equals来确定是不是该删除该对象, 自定义的类, 需要自己重写父类的equals方法
重写equals方法, 也应该重写hashCode方法
4、hashCode通常用来做索引, 一个对象通过它的hashCode的值可以找到它在内存中的地址, 所以两个对象如果equals了, 而且又要作为索引的情况下, hashCode的值必须相等
举例说明:
package util; import java.util.ArrayList; import java.util.Collection; public class TextCollection { public static void main(String[] args) { //接口Collection不能直接new,必须由它的实现类来new,因为接口是抽象类,没有方法体,没法直接用 Collection c = new ArrayList(); //父类的引用指向子类的对象 c.add(1); c.add("nihao"); c.add(new Person()); System.out.println(c); //输出结果为:[1, nihao, Person [哈哈]] c.remove(1); c.remove("nihao"); c.remove(new Person());//new在内存中的指向不一样,必须equals System.out.println(c.size()); //输出结果为:1 System.out.println(c); //输出结果为:[Person [哈哈]] } } class Person{ @Override public String toString() { return "Person [哈哈]"; } }
ArrayList(API中说初始容量为10的, 注意这个问题), LinkedList
有顺序, 可以重复添加
set(有一个返回值要注意 !)
retainAll(Collection)----返回一个boolean值, 当list的内容被改变的时候返回true, 否则返回false;仅保留此列表中包含在指定集合中的元素(可选操作)。
size():返回此列表中的元素数。
package util; import java.util.ArrayList; import java.util.List; public class TextCollection1 { @SuppressWarnings("unchecked") public static void main(String[] args) { List list1 = new ArrayList(); List list2 = new ArrayList(); List list3 = new ArrayList(); for (int i = 0; i < 5; i++) { list1.add("String" + i); if(i%2==0){ list2.add("String" + i); list3.add("String" + i*10+1); } } System.out.println(list1); //输出结果为:[String0, String1, String2, String3, String4] System.out.println(list1.get(3)); //输出结果为:String3 System.out.println(list1.set(2, "哈哈")); //输出结果为:String2 System.out.println(list1); //输出结果为:[String0, String1, 哈哈, String3, String4] System.out.println(list1.remove(4)); //输出结果为:String4 System.out.println(list1); //输出结果为:[String0, String1, 哈哈, String3] System.out.println(list1.indexOf("String3")); //输出结果为:3 System.out.println(list1.lastIndexOf("String3")); //输出结果为:3 //list1.retainAll(list2); //如果改变了 方法返回true, 如果没改变 返回false System.out.println(list1.retainAll(list2)); //输出结果为:true System.out.println(list1); //输出结果为:[String0] //list1.retainAll(list3); System.out.println(list1.retainAll(list3)); //输出结果为:false System.out.println(list1); //输出结果为:[] } }
Map接口
put:有个返回值
remove:有个返回值
例子:
package util1; import java.util.HashMap; import java.util.Map; public class TextCollection2 { @SuppressWarnings("unchecked") public static void main(String[] args) { Map map = new HashMap(); for (int i = 0; i < 5; i++) { map.put(i, new Person("name" + i)); } System.out.println(map); //输出值为:{0=Person [name0], 1=Person [name1], 2=Person [name2], // 3=Person [name3], 4=Person [name4]} map.put(5, new Person("新人")); System.out.println(map); //输出值为:{0=Person [name0], 1=Person [name1], 2=Person [name2], // 3=Person [name3], 4=Person [name4], 5=Person [新人]} map.put(1, new Person("又来个新人")); System.out.println(map); //输出值为:{0=Person [name0], 1=Person [又来个新人], 2=Person [name2], // 3=Person [name3], 4=Person [name4], 5=Person [新人]} System.out.println(map.get(1)); //输出值为:Person [又来个新人] System.out.println(map.remove(1)); //输出值为:Person [又来个新人] System.out.println(map); //输出值为:{0=Person [name0], 2=Person [name2], 3=Person [name3], //4=Person [name4], 5=Person [新人]} System.out.println(map.remove(0, new Person("name" + 0))); //输出值为:true System.out.println(map); //输出值为:2=Person [name2], 3=Person [name3], 4=Person [name4], //5=Person [新人]} System.out.println(map.containsKey(4));//输出值为:true System.out.println(map.containsValue(new Person("name" + 0)));//输出值为:false,在上一步已经删除 System.out.println(map.size());//输出值为:4 System.out.println(map.isEmpty());//输出值为:false map.clear(); System.out.println(map);//输出值为:{} Map map2 = new HashMap(); for (int i = 0; i < 5; i++) { map2.put("a"+i, new Person("====a" + i)); } map.putAll(map2); System.out.println(map);//输出值为:{a1=Person [====a1], a2=Person [====a2], a3=Person [====a3], //a4=Person [====a4], a0=Person [====a0]} } } class Person{ String name; public Person(String name){ this.name = name; } @Override public String toString() { return "Person [" + name + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
标签:check 子类 text 数据结构 getc 下标 注意 定义 数组
原文地址:http://www.cnblogs.com/sutao/p/7240586.html