java学习笔记(十二)

一、集合和数据结构

1.数学集合

2.在软件开发中应用广泛:商品列表

3.java中使用接口Collection定义了集合的概念,Collection接口定义了集合的功能抽象,添加元素,删除元素,集合的并,交,差

例子:

<span style="font-size:14px;">public static void main(String[] args) {
		Collection cards=null;
		cards=new ArrayList();
		System.out.println(cards.isEmpty());      //</span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:10px;">isEmpty()方法判断集合是否为空</span></span><span style="font-size:14px;">

		cards.add(new Card(Card.SPADE,Card.NINE));//add()方法向集合中添加对象
		System.out.println(cards.isEmpty());
		System.out.println(cards.size());         //size()方法获取集合的大小
		cards.add(new Card(Card.SPADE,Card.TEN));
		cards.add(new Card(Card.SPADE,Card.JACK));
		cards.add(new Card(Card.SPADE,Card.QUEEN));
		cards.add(new Card(Card.SPADE,Card.KING));
		cards.add(new Card(Card.SPADE,Card.ACE));
		System.out.println(cards.size());
		System.out.println(cards);
		
		Collection others=new ArrayList();
		others.add(new Card(Card.JOKER,Card.BLACK));
		others.add(new Card(Card.JOKER,Card.COLOR));
		
		cards.addAll(others);<span style="white-space:pre">	</span>                   //addAll()方法实现集合的合并
		System.out.println(cards);
		
		Card ace=new Card(Card.SPADE,Card.ACE);
		System.out.println(cards.contains(ace));//contains底层会调用equals,判断是否包含特定元素
	}</span>
Collection具体还有那些方法见Java API

4.java提供了集合的实现类:ArrayList,LinkedList,HashSet等

例子:

public static void main(String[] args) {
//		List cards=new ArrayLiat();//底层用数组实现
		List cards=new LinkedList();//底层用双向循环链表实现
		for(int rank=Card.THREE;rank<=Card.DEUCE;rank++){
			cards.add(new Card(Card.DIAMOND,rank));<span style="white-space:pre">		</span>//add()方法向链表中添加元素
			cards.add(new Card(Card.CLUB,rank));
			cards.add(new Card(Card.HEART,rank));
			cards.add(new Card(Card.SPADE,rank));
		}
		cards.add(new Card(Card.JOKER,Card.BLACK));
		cards.add(new Card(Card.JOKER,Card.COLOR));
		System.out.println(cards);
		Card c=(Card)cards.get(3);//get(index),根据下标来查看链表元素
		System.out.println(c);
		//洗牌
		Random r=new Random();
		for(int i=cards.size()-1;i>0;i--){
			int idx=r.nextInt(i);
			Card x=(Card)cards.get(i);
			x=(Card)cards.set(idx, x);
			cards.set(i, x);
		}
		System.out.println(cards);
	}

5.LinkedList是使用双向循环链表实现的线性表,ArrayList是使用变长数组实现的线性表集合

例子:

class MyLinkedList{//链表
	Node head;
	public MyLinkedList() {
		head=new Node(new Card(Card.HEART,Card.NINE));
		head.next=new Node(new Card(Card.HEART,Card.TEN));
		head.next.next=new Node(new Card(Card.HEART,Card.JACK));
		head.next.next.next=new Node(new Card(Card.HEART,Card.QUEEN));
	}
	public String toString(){<span style="white-space:pre">	</span>//覆盖的toString方法
		return head.toString();
	}
	class Node{//内部类,结点
		Object data;
		Node next;
		public Node(Object data){
			this.data=data;
		}
		public String toString(){
			return data+(next!=null?"->"+next:"");
		}
	}
}
public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyLinkedList list=new MyLinkedList();
		System.out.println(list);
	}

6.线性表(List接口)是经常使用的

7.Set无序且不重复

HashSet利用HashMap实现,就是只有key的HashMap

例子:

public static void main(String[] args) {
		Map users=new HashMap();
		//put构建散列表
		users.put("john", new User("john","123"));//put是向哈希表中加一项
		users.put("tom", new User("tom","123"));
		users.put("jerry", new User("jerry","123"));
		users.put("robin", new User("robin","123"));
		
		//User u=(User)users.get("john");//get是从哈希表中找到对应项
		Scanner sc=new Scanner(System.in);
		String name=sc.nextLine();
		String pwd=sc.nextLine();
		if(!users.containsKey(name)){//判断是否包含关键字  u==null
			System.out.println("无此用户");
			return;
		}
		User u=(User)users.get(name);//将关键字绑定的对象返回回来
		if(!u.pwd.equals(pwd)){
			System.out.println("密码错误");
			return;
		}
		System.out.println("欢迎您:"+u.name);
	}
}
class User{
	String name;
	String pwd;
	public User(String name,String pwd){
		this.name=name;
		this.pwd=pwd;
	}
}

更具体的用法见Java API

二、集合的应用

贪吃蛇

1.蛇包含节点的(线性)集合,节点在行列坐标(i,j)的位置

2.蛇可以动,向当前方向前进一步,向指定方向前进一步,不可以反向

3.蛇在一个面板中运行,面板控制行列坐标,提供显示方法

4.重构Worm类,提供检查坐标是否在蛇身上的方法

5.提供测试类,测试蛇在面板上运行

①节点类,坐标

②蛇类,向当前方向移动,向指定方向移动

③面板类,控制坐标的设置,显示蛇的位置和移动

你可能感兴趣的:(java学习笔记(十二))