Ответы пользователя по тегу IntelliJ IDEA
  • Можно ли как-то оптимизировать потребление памяти IntelliJ?

    EugeneP2
    @EugeneP2
    Java Dev
    Обычно, оптимизация работы IntelliJ сводится к увеличению ограничения по памяти:) Так что докупайте оперативную память
    Ответ написан
    Комментировать
  • Сортирование матрицы (двухмерного массива) Java?

    EugeneP2
    @EugeneP2
    Java Dev
    Если вы планируете сортировать матрицу, то конечно эффективней будет хранить её в виде одномерного массива, чтоб можно было эффективно отсортировать его с помощью быстрой сортировки реализованной методе sort в класса java.util.Arrays.

    А чтоб с массивом можно было работать как с матрицей, можно реализовать класс-адаптер
    import java.util.Arrays;
    
    public class IntMatrix {
    		private final int[] lineMatrix;
    		private final int n;
    		private final int m;
    
    		public IntMatrix(int[] lineMatrix, int n, int m) {
    
    			if (n < 0 || m < 0 || lineMatrix.length != n * m)
    				throw new IllegalArgumentException();
    
    			this.lineMatrix = lineMatrix.clone();
    			this.n = n;
    			this.m = m;
    		}
    
    		public int get(int i, int j) {
    			if (i < n && j < m)
    				return lineMatrix[i * m + j];
    			else
    				throw new ArrayIndexOutOfBoundsException();
    		}
    
    		public void set(int value, int i, int j) {
    			if (i < n && j < m)
    				lineMatrix[i * m + j] = value;
    			else
    				throw new ArrayIndexOutOfBoundsException();
    		}
    
    		public  void sort() {
    			// готовая реализация быстрой сортировки
    			Arrays.sort(lineMatrix);
    		}
    
    		public int getN() {
    			return n;
    		}
    
    		public int getM() {
    			return m;
    		}
    	}


    Пример использования
    public static void main(String[] args) {
    
    
    		int n = 10, m = 15;
    
    		IntMatrix intMatrix = new IntMatrix(new int[n * m], n, m);
    
    		fillMatrixByRandomValues(intMatrix);
    
    		printMatrix(intMatrix);
    
    		intMatrix.sort();
    
    		System.out.println("---------------");
    
    		printMatrix(intMatrix);
    	}
    
    
    	/** заполнение матрицы случайными числами */
    	static void fillMatrixByRandomValues(IntMatrix matrix) {
    		Random random = new Random();
    		for (int i = 0; i < matrix.getN(); i++) {
    			for (int j = 0; j < matrix.getM(); j++) {
    				matrix.set(random.nextInt(1000), i, j);
    			}
    		}
    	}
    
    	/** печать матрицы в консоль */
    	static void printMatrix(IntMatrix matrix) {
    		for (int i = 0; i < matrix.getN(); i++) {
    			for (int j = 0; j < matrix.getM(); j++) {
    				System.out.printf("%s\t", matrix.get(i , j));
    			}
    			System.out.println();
    		}
    	}


    Линейный массив будет занимать меньше места, чем двумерный. Сортировка реализованная в классе java.util.Arrays хорошо и по скорости и по расходу памяти.
    Ответ написан
    3 комментария
  • Как правильно записать URL mysql в java?

    EugeneP2
    @EugeneP2
    Java Dev
    Вообще, объект драйвера вручную никто сам не создаёт.

    1. Нужный драйвер должен быть указан в classpath.

    2. Перед получением коннекта к БД, вам нужно выполнить Class.forName(имя класса драйвера) - загрузчик классов загружает указанный класс, что приводит к инициализации статических полей и выполнение статических блоков этого класса. Причем тут статический блок? - в статическом блоке класса драйвера реализована регистрация в DriverManager-е.

    Вот пример:

    public class Driver extends NonRegisteringDriver implements java.sql.Driver {   
    static {  // статический блок
            try {   
                       java.sql.DriverManager.registerDriver(new Driver());   
                 } catch (SQLException E) {   
                             throw new RuntimeException("Can't register driver!");  
                 }  
           }
             // остальной код опущен
    }


    после чего вот это DriverManager.getConnection(URL, name,pass) без проблем находит драйвер.

    Class.forName("com.mysql.jdbc.Driver");    
    Connection con=DriverManager.getConnection( "jdbc:mysql://localhost:3306/sonoo","root","root");


    Хотя вы сами вручную и регистрируете драйвер, но DriverManager ваш драйвер не увидит. Возможно это как то связано с тем, что DriverManager и класс драйвера загружены разными загрузчиками...

    Но так тоже можно получить коннект, вместо
    connection = DriverManager.getConnection(URL, name,pass);

    использовать
    connection = driver.connect(....);
    Ответ написан