Você está aqui: Java ::: Coleções (Collections) ::: Set (Conjunto) |
Como usar objetos da interface Set para representar a união de dois ou mais conjuntos na linguagem JavaQuantidade de visualizações: 4552 vezes |
Na teoria dos conjuntos, a união de dois ou mais conjuntos é o conjunto dos elementos que pertencem a pelo menos um destes conjuntos. Assim, seja A = {2, 5, 8, 19, 30} e B = {2, 3, 1, 30}. A união desses dois conjuntos é C = {1, 2, 3, 5, 8, 19, 30}. Na programação Java podemos representar a união de dois conjuntos usando objetos da interface Set e qualquer uma de suas implementações. Para este exemplo vou usar a classe TreeSet, que permite a ordenação dos elementos. Veja o código: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class Estudos{ public static void main(String[] args) { // primeiro conjunto Set<Integer> conjuntoA = new TreeSet<>(); conjuntoA.add(2); conjuntoA.add(5); conjuntoA.add(8); conjuntoA.add(19); conjuntoA.add(30); // segundo conjunto Set<Integer> conjuntoB = new TreeSet<>(); conjuntoB.add(2); conjuntoB.add(3); conjuntoB.add(1); conjuntoB.add(30); // vamos obter a união dos dois conjuntos Set<Integer> conjuntoC = uniao(conjuntoA, conjuntoB); // vamos exibir os elementos no conjunto C Iterator iterator = conjuntoC.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } } // método genérico que permite obter a união de dois conjuntos public static <T> Set<T> uniao(Set<T> conjA, Set<T> conjB){ // Primeiro o conjunto C recebe todos os elementos do conjunto A Set<T> conjC = new TreeSet<>(conjA); // Em seguida o conjunto C recebe todos os elementos do conjunto B. // Como um Set não aceita elementos duplicados, apenas os elementos // de B que ainda não estejam no conjunto C serão aceitos conjC.addAll(conjB); return conjC; } } Ao executarmos este código teremos o seguinte resultado: 1 2 3 5 8 19 30 |
![]() |
Java ::: Reflection (introspecção) e RTI (Runtime Type Information) ::: Passos Iniciais |
Saiba o que é Reflexão (Reflection) em Java - Como usar Reflexão (Reflection) na linguagem Java - RevisadoQuantidade de visualizações: 18348 vezes |
Reflection (ou Reflexão), também conhecida como RTI (Runtime Type Information) em algumas linguagens, é um mecanismo para descobrir dados a respeito de um programa em tempo de execução. Reflection em Java nos permite descobrir informações sobre atributos ou membros (campos), métodos e construtores de classes. Podemos também operar nos campos e métodos que descobrimos. A Reflection permite o que é normalmente chamada de programação dinâmica em Java. A Reflection em Java é conseguida usando a Java Reflection API. Esta API consiste de classes nos pacotes java.lang e java.lang.reflect. Antes de prosseguirmos, veja um exemplo de como podemos listar todos os métodos públicos da classe Object: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package arquivodecodigos; import java.lang.reflect.*; public class Estudos{ public static void main(String args[]){ // vamos carregar a classe Object try{ Class c = Class.forName("java.lang.Object"); // obtém os nomes dos métodos Method[] metodos = c.getMethods(); // exibe o nome de cada método for(int i = 0; i < metodos.length; i++){ System.out.println(metodos[i].getName()); } } catch(ClassNotFoundException e){ System.out.println(e.getMessage()); } System.exit(0); } } Ao executarmos este código nós teremos o seguinte resultado: wait wait wait equals toString hashCode getClass notify notifyAll Eis uma lista das coisas que podemos fazer com a Java Reflection API: 1) Determinar a classe de um objeto; 2) Obter informações sobre os modificadores, campos (atributos), métodos, construtores e superclasses de uma classe; 3) Descobrir quais constantes e declarações de métodos pertencem a uma interface; 4) Criar uma instância de uma classe cujo nome não sabemos até o tempo de execução; 5) Obter e definir o valor do campo de um objeto; 6) Invocar um método em um objeto; 7) Criar um novo array, cujo tamanho e tipo de dados só saberemos em tempo de execução. A Java Reflection API é geralmente usada para criar ferramentas de desenvolvimento tais como debuggers, class browsers e construtores de GUI. Geralmente, neste tipo de ferramentas, precisamos interagir como classes, objetos, métodos e campos, e não sabemos quais em tempo de compilação. Assim, a aplicação deve, dinamicamente, encontrar e acessar estes itens. Esta dica foi revisada e testada no Java 8. |
Java ::: Dicas & Truques ::: Arquivos e Diretórios |
Como renomear um diretório em Java usando o método renameTo() da classe File - Arquivos e diretórios em JavaQuantidade de visualizações: 2 vezes |
Nesta dica mostrarei como podemos usar o método renameTo() da classe File da linguagem Java para renomear um diretório. Veja que este método retorna boolean, ou seja, o valor true caso o diretório for renomeado com sucesso e false em caso contrário. Veja o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package arquivodecodigos; import java.io.*; public class Estudos{ public static void main(String[] args){ // diretorio com o nome antigo File dir1 = new File("c:\\java"); // diretorio com o novo nome File dir2 = new File("c:\\java_novo"); boolean ok = dir1.renameTo(dir2); if(ok){ System.out.println("Diretorio renomeado com sucesso."); } else{ System.out.println("Nao foi possivel renomear o diretorio."); } } } Ao executar este código Java nós teremos o seguinte resultado: Diretorio renomeado com sucesso. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios Resolvidos de Java - Pesquisando um valor em uma matriz de int e retornando o índice no qual o mesmo foi encontradoQuantidade de visualizações: 9401 vezes |
Pergunta/Tarefa: Escreva um programa Java GUI ou console que declara, constrói e inicializa uma matriz de 5 inteiros. Em seguida peça ao usuário para informar um valor inteiro e informe se o valor lido está contido na matriz. Se o valor for encontrado na matriz, retorne seu índice (lembre-se de que os índices dos elementos em uma matriz Java começam em 0). A declaração, construção e inicialização da matriz pode ser feita da seguinte forma: // declara, constrói e inicializa uma matriz de 5 inteiros int valores[] = {4, 21, 8, 120, 1}; Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import javax.swing.JOptionPane; public class Estudos { public static void main(String[] args) { // declara, constrói e inicializa uma matriz de 5 inteiros int valores[] = {4, 21, 8, 120, 1}; // vamos ler um valor inteiro int pesquisa = Integer.parseInt(JOptionPane.showInputDialog("Valor:")); // vamos verificar se o valor está contido na matriz e retornar seu índice int pos = -1; // índice não existente na matriz for(int i = 0; i < valores.length; i++){ if(valores[i] == pesquisa){ pos = i; // encontrou? vamos anotar este índice break; } } // vamos mostrar o resultado if(pos > -1){ JOptionPane.showMessageDialog(null, "O valor foi encontrado no índice: " + pos); } else{ JOptionPane.showMessageDialog(null, "O valor não foi encontrado na matriz"); } } } Uma idéia na resolução deste exercício é inicializar a variável que guardará o índice do elemento pesquisado com o valor -1. Assim, se no final da pesquisa o valor ainda for -1, sabemos que o elemento não foi encontrado. |
Java ::: Dicas & Truques ::: Arquivos e Diretórios |
Como excluir um diretório em Java usando o método delete() da classe File - Curso de Java para iniciantesQuantidade de visualizações: 9611 vezes |
Em algumas situações nós precisamos excluir um ou mais diretórios a partir de nossos códigos Java. Para isso nós podemos usar o método delete() da classe File, no pacote java.io. Veja o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package arquivodecodigos; import java.io.*; public class Estudos{ public static void main(String[] args){ File diretorio = new File("c:\\java"); if(diretorio.delete()){ System.out.println("Diretorio excluido com sucesso."); } else{ System.out.println("Não foi possivel excluir o diretorio"); } } } Ao executarmos este código nós teremos o seguinte resultado (assumindo que você tem um diretório chamado "c:\\java"): Diretorio excluido com sucesso. Lembre-se de que o método delete() da classe File só permitirá a exclusão do diretório se este estiver vazio. |
Java ::: Fundamentos da Linguagem ::: Tipos de Dados |
Como usar o tipo de dados char da linguagem JavaQuantidade de visualizações: 25317 vezes |
O tipo de dados char é usado para representar um único caractere. Veja:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ char letra1 = 'A'; char letra2 = 'B'; System.out.println("As letras são: " + letra1 + " e " + letra2); System.exit(0); } } Observe que um literal string deve estar entre aspas duplas, enquanto que um literal do tipo caractere deve estar entre aspas simples. Desta forma, "H" é uma string e 'H' é um caractere. O tipo char é integral mas sem sinal. A faixa de uma variável deste tipo vai de 0 à 65536. Os caracteres em Java são codificados em Unicode, que é um codificação de 16 bits capaz de representar uma larga faixa de caracteres internacionais. Se os 9 bits mais significantes de um char forem todos 0, então a codificação será a mesma que o ASCII de 7 bits. É possível atribuir literais inteiros à uma variável do tipo char. Veja: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ char letra = 98; System.out.println("A letra é: " + letra); System.exit(0); } } Este código exibirá o caractere 'b'. Veja um exemplo no qual imprimimos todas as letras do alfabeto minúsculo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ for(char i = 97; i <= 122; i++){ System.out.print(i + " "); } System.exit(0); } } O tipo char pode ser convertido (sem a necessidade de cast) para os seguintes tipos: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- char -> int -> long -> float -> double Não é possível converter um char em um short ou byte. Caso isso seja realmente necessário, temos que fazer uma coerção (cast). Veja: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ char letra = 57; byte valor = (byte)(letra); System.exit(0); } } É fácil entender porque um char não pode ser convertido implicitamente em um byte. Um char possui 16 bits enquanto um byte possui apenas 8 bits. Mas, um short possui 16 bits. Assim, o que impede a conversão implicita de um char para um short? É simples. Como o tipo short possui sinal (aceita valores negativos) e o tipo char é sem sinal, o resultado é que o tipo short possui um bit a menos (reservado para o sinal) e portanto, não pode acomodar os 16 bits do tipo char. |
Java ::: Dicas & Truques ::: Programação Orientada a Objetos |
Programação orientada a objetos em Java - Como usar o modificador protected em suas variáveis e métodos JavaQuantidade de visualizações: 10666 vezes |
O modificador protected pode ser aplicado às variáveis e métodos de uma classe. Membros de uma classe marcados como protected podem ser acessados por qualquer classe no mesmo pacote (package) ou por suas classes derivadas (subclasses), mesmo que estas classes estejam em pacotes diferentes. Contudo, a discussão sobre este modificador é um pouco mais profunda. Subclasses residentes em outros pacotes tem algumas limitações em relação ao acesso de variáveis e métodos marcados como protected em suas superclasses. Em resumo, uma subclasse em um pacote diferente pode sobrescrever métodos protected de suas superclasses. Além disso, instâncias destas subclasses podem acessar ou modificar variáveis protected herdadas de suas superclasses, assim como chamar os métodos protected herdados. Porém, estas instâncias não têm liberdade para efetuar estas ações em outras instâncias das mesmas subclasses. Veja um exemplo no qual mostramos como acessar variáveis marcadas como protected em uma classe a partir de sua classe derivada: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- // superclasse class Pessoa{ protected String nome; public String getNome(){ return this.nome; } } // subclasse class Aluno extends Pessoa{ public Aluno(){ this.nome = "Osmar J. Silva"; } } public class Estudos{ public static void main(String args[]){ // Cria um objeto da classe Aluno Aluno a = new Aluno(); System.out.println(a.getNome()); } } |
Java ::: Classes e Componentes ::: JList |
Java Swing para iniciantes - Como adicionar itens a uma JList em tempo de execuçãoQuantidade de visualizações: 22696 vezes |
Este exemplo mostra como inserir itens em uma JList do Java Swing em tempo de execução. O valor a ser inserido é informado em um JTextField. Veja que estamos usando a classe DefaultListModel e seu método addElement() para adicionar os novos itens. Veja a janela JFrame e os componentes usados para exemplificar esta funcionalidade: ![]() E agora veja o código Java Swing completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package arquivodecodigos; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Estudos extends JFrame{ JList lista; JTextField campo; public Estudos() { super("A classe JList"); Container c = getContentPane(); c.setLayout(new FlowLayout(FlowLayout.LEFT)); // Cria um novo DefaultListModel DefaultListModel modelo = new DefaultListModel(); // Cria a JList lista = new JList(); // Atribui o DefaultListModel à JList lista.setModel(modelo); // Um botão que permite adicionar itens na JList JButton btn = new JButton("Adicionar na JList"); btn.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ String valor = campo.getText(); if(valor.length() != 0){ ((DefaultListModel)(lista.getModel())) .addElement(valor); campo.setText(""); campo.requestFocus(); } } } ); // Adiciona a lista à janela c.add(new JScrollPane(lista)); // Cria um JTextField e o adiciona à janela campo = new JTextField(10); c.add(campo); // Adiciona o botão à janela c.add(btn); setSize(350, 250); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
Java ::: Pacote java.awt ::: Graphics |
Como desenhar texto na superfície de uma JLabel do Java Swing usando o método drawString() da classe GraphicsQuantidade de visualizações: 11623 vezes |
A classe Graphics possui um método chamado drawString() que é usado para desenhar uma string na superfície de um componente. Veja a assinatura deste método:public abstract void drawString(String str, int x,int y) Como podemos ver, só precisamos fornecer a string a ser desenhada, a coordenada x e a coordenada y. Estas coordenadas são obtidas a partir do canto superior esquerdo do componente no qual desenharemos. O trecho de código abaixo mostra como desenhar a string "Arquivo de Códigos" em um JLabel: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Estudos extends JFrame{ JLabel label; public Estudos() { super("Desenhando em um JLabel"); Container c = getContentPane(); c.setLayout(new BorderLayout()); // Cria um JLabel label = new JLabel(); c.add(label, BorderLayout.CENTER); // Cria um botão JButton btn = new JButton("Desenhar uma string"); btn.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ // Desenha uma string no JLabel Graphics graphics = label.getGraphics(); graphics.drawString("Arquivo de Códigos", 20, 50); } } ); // Adiciona o botão à janela c.add(btn, BorderLayout.SOUTH); setSize(350, 250); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Há algo de interessante neste código. Se você maximizar, minimizar ou redimensionar a janela verá que o desenho é apagado. Isso acontece porque todas as vezes que a janela sofre alguma alteração, ela é pintada novamente, juntamente com seus componentes filhos. Se você deseja que o desenho seja feito automaticamente novamente, é melhor fazer uma sub-classe do componente desejado e sobrescrever seu método paintComponent(). Nesta mesma seção você encontrará exemplos de como fazer isso. |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
JavaScript - Como remover o primeiro elemento de um array em JavaScript - Como usar a função shift() do objeto Array do JavaScript |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |