本帖最后由 小石姐姐 于 2018-4-20 09:48 编辑
集合
day06:
集合
集合:
集合不止我们之前学过的ArrayList 还有 LinkedList ,HashSet,LinkedSet。它们都是集合;
其中ArrayList,LinkedList 继承自List接口这两种集合是有索引的可以根据索引来添加获取或者删除元素,根据索引来添加获取或者删除元素所以元素是有序的;
我们可以用循环来遍历他们;
HashSet,LinkedSet继承自Set接口。它们没有索引,也就不能用循环来获取其中的元素。
它们的元素需要用迭代器Iterator来遍历;由于没有索引所以元素的顺序不是我们可以决定的;在Set接口下的集合其中的元素是根据哈希码值来排序的;
迭代器遍历Set集合的原理是迭代器有判断集合有没有下一个元素的功能;
hasNext()方法:判断集合中是否有元素可以迭代
next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
使用这两种方法就可以遍历Set集合;
public class IteratorDemo {
public static void main(String[] args) {
//method();
//创建集合对象
Collection c = new ArrayList();
//添加元素
c.add("hello");
c.add("world");
c.add("java");
//获取迭代器对象
Iterator it = c.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
这就是用迭代器遍历Set集合的方式;
但是使用迭代器的时候不能通过集合来改变集合大小;
也即是在使用迭代器遍历数组的时候不能使用集合来增删集合内的元素;
如:
如果想要在使用迭代器的时候删掉"java"
public class IteratorDemo {
public static void main(String[] args) {
//method();
//创建集合对象
Collection c = new ArrayList();
//添加元素
c.add("hello");
c.add("world");
c.add("java");
//获取迭代器对象
Iterator it = c.iterator();
while(it.hasNext()) {
/* if(it.hasNext.equse("java"){
c.remove("java"); //这里出错了 删除掉java会导致迭代器对象it的长度和集合c的长度不同导致报错;
}*/
it.remove("java");//但我们可以通过迭代器来修改集合修改的结果会同步到集合。
System.out.println(it.next());
}
}
我们一般都会用集合来储存自己定义的类型的对象
通常我们存进集合后再拿出来的是我们定义的对象的地址值然后通过get方法来获取对象的属性;
但是我们可以通过重写toString方法来直接获取我们想要的信息;
public class Phone {
private String brand;
private int price;
static private int size;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public static int getSize() {
return size;
}
public static void setSize(int size) {
Phone.size = size;
}
public Phone(String brand, int price) {
super();
this.brand = brand;
this.price = price;
}
public Phone() {
super();
// TODO Auto-generated constructor stub
}
public void game() {
System.out.println("玩游戏");
}
/*@Override
public String toString() {
return "Phone [brand=" + brand + ", price=" + price + "]";
}*/
public class 阿萨德 {
public static void main(String[] args) {
ArrayList<Phone> s =new ArrayList<>();
s.add(new Phone("asd",1500));
s.add(new Phone("as",1500));
System.out.println(s);
}
}
}
从控制台我们得到[dd.Phone@11dba45, dd.Phone@b03be0];两个元素的地址值
public class 阿萨德 {
public static void main(String[] args) {
ArrayList<Phone> s =new ArrayList<>();
s.add(new Phone("asd",1500));
s.add(new Phone("as",1500));
for (int i = 0; i < s.size(); i++) {
System.out.println(s.get(i).getBrand()+" "+s.get(i).getPrice());
}
}
从控制台我们得到asd 1500 as 1500 两个对象的两个元素;
public class Phone {
private String brand;
private int price;
static private int size;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public static int getSize() {
return size;
}
public static void setSize(int size) {
Phone.size = size;
}
public Phone(String brand, int price) {
super();
this.brand = brand;
this.price = price;
}
public Phone() {
super();
// TODO Auto-generated constructor stub
}
public void game() {
System.out.println("玩游戏");
}
@Override //重写toString
public String toString() {
return "Phone [brand=" + brand + ", price=" + price + "]";
}
}
public class 阿萨德 {
public static void main(String[] args) {
ArrayList<Phone> s =new ArrayList<>();
s.add(new Phone("asd",1500));
s.add(new Phone("as",1500));
System.out.println(s);
}
}
再次打印集合S看看
控制台输出[Phone [brand=asd, price=1500], Phone [brand=as, price=1500]]
直接就打印出了想要的信息 |
|